一、Spring常用注解

一.IOC相关注解

IOC指的是将类注册为Bean交由Spring容器进行控制。

1、@Component(@Service/@Repository/@Controller)

这四个注解是等价的,主要用于将标记的类注册到Spring容器中

  • @Component:通用注解,不知道写什么就写这个
  • @Controller:Controller层注解
  • @Service:Service层注解,添加在实现类上。
  • @Repository应用中持久层Mapper上的

2、@Configuration和@Bean

@Configuration常和@Bean一起配合使用。
@Configuration:配置类,注解标注在类上,相当于Spring XML中的Beans。

3、@Value和@ConfigurationProperties

@ConfigurationProperties:用在类上或者方法上
@Value:用在对象的变量属性上,表示给他付个值。

4、@Autowired(@Qualifier/@Resource)

@Autowired
根据属性类型进行自动装配
@Autowired(required=true),默认值,表示注入的时候,该bean必须存在,否则就会注入失败。
@Autowired(required=false):表示忽略当前要注入的bean,如果有直接注入,没有跳过,不会报错。
@Qualifier
根据属性名称进行注入,如果要使用,必须和@Autowired一起使用。
@Resource
Java原生注解,可以根据类型注入,也可以根据名称注入。

二.AOP相关注解

AOP指的是面向切面编程,对一个方法进行动态代理,在这个方法执行之前,执行之后,环绕等处进行方法增强。
常用的代理有两种,一种是JDK自带的,但是这种有个缺点只能支持接口。因此基本上使用的都是Cglib进行动态代理。

1、@Aspect

把当前类标识为一个切面供容器

2、@Pointcut

切入点

3、@Before

前置增强

4、@Around

环绕增强
@Around(“execution(* aop.CGLIBAOP.StudentAop.add(…))”)
public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
System.out.println(“环绕之前”);
//被增强方法
proceedingJoinPoint.proceed();

System.out.println("环绕之后");
}

5、@After

后置增强

6、@AfterReturning

返回增强

7、@AfterThrowing

异常增强

三.参数校验相关注解

1、@Validated

@Validated:参数校验

四.事务相关注解

1、 @Transactional

@Transactional默认只回滚RuntimeException 或者 Error,需要进行配置,才能触发Exception回滚。
需要配置rollbackFor,只要是个异常就抛出。

@Transactional(rollbackFor = Exception.class)

五.缓存相关注解(缓存注解不常用,最常用的是是第一个,因为最好是显式的去调用缓存)

1、@PostConstruct

当bean创建完成的时候,会后置执行@PostConstruct修饰的方法

/**
     * 项目启动时,初始化参数到缓存
     */
    @PostConstruct
    public void init()
    {
        List<SysConfig> configsList = configMapper.selectConfigList(new SysConfig());
        for (SysConfig config : configsList)
        {
            redisService.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
        }
    }

2、@EnableCaching

开启基于注解的缓存

3、@Cacheable

4、@CachePut

5、@CacheEvict

6、@CacheConfig

六.Swagger配置文件相关注解

1、@EnableSwagger2

七.定时任务注解

1、@EnableScheduling

定义在主启动类上,意思是开启定时任务。

2、@Scheduled

定义在方法上,配置定时执行任务。

八.异步任务注解

1、@EnableAsync

定义在主启动类上,意思是开启异步任务。

2、 @Async

定义在方法上,意思是为异步方法

二、SpringMVC常用注解

一.@RequestMapping(@GettingMapping/@PostMapping)

  • @RequestMapping:用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
  • @GettingMapping:=@RequestMapping指定Method=Get
  • @PostMapping:=@RequestMapping指定Method=POST

二.@ResponseBody和@RequestBody

  • @RequestBody:指的是方法接收到的是一个对象,而不是一个参数。
    使用@RequestBody,是用于接收Content-Type为application/json类型的请求,数据类型是JSON:{“aaa”:“111”,“bbb”:“222”}。
    不使用@RequestBody注解时,可以接收Content-Type为application/x-www-form-urlencoded类型的请求所提交的数据,数据格式:aaa=111&bbb=222 ,form表单提交以及jQuery的.post()方法所发送的请求就是这种类型。

@ResponseBody;

三.@RequestParam和@PathVariable

@PathVariable:主要用来获取 URL 参数,Spring Boot 支持 Restfull 风格的 URL,比如一个 GET 请求携带一个参数 id,我们将 id 作为参数接收,可以使用 @PathVariable 注解。如下:

@RequestMapping(value="/user/{username}")
    public String userProfile(@PathVariable(value="username") String username) {
    	return "user"+username;
    }

对应URL为

localhost:8080/user/zhangsan

@RequestParam:和@PathVariable在功能上看没有任何区别,但是URL不同。

@RequestMapping(value="/user")
	public String getUserBlog(@RequestParam(value="username") String username) {
		return "blogId="+blogId;
	}
localhost:8080/user/?username=zhangsan

三、Mybatis常用注解

常用Mybatis注解

四、SpringBoot常用注解

一.SpringBoot核心注解

1、@SpringBootConfiguration

@SpringBootConfiguration的内部还有一个@Configuration,表示当前类为一个配置类(XML配置文件的注解表现形式),并可以被组件扫描器扫描。

2、@EnableAutoConfiguration(最核心注解,加载操作)

帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot,并创建对应配置类的Bean,并把该Bean实体交给IoC容器进行管理。

3、@ComponentScan(定义扫描范围)

@ComponentScan主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中

4、@SpringBootApplication

1,2,3同时生效=@SpringBootApplication

五、SpringCloudAlibaba常用注解

一.Nacos

1、@EnableDiscoveryClient

二.Feign

1、@EnableFeignClients

Feign本质上是一个HttpClient,此处是开启Feign服务。

2、@FeignClient

定义一个调用某个服务地址的Feign客户端,可以配合Sentinel实现。

@FeignClient(contextId = "remoteLogService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteLogFallbackFactory.class)
public interface RemoteLogService
{
}

三.Sentinel

1、@SentinelResource

熔断是异常(慢调用,响应时间超时,发生异常)的托底,限流是对超量并发(访问量过大,以信号量进行控制,Hystrix默认的是线程池)的托底。

@GetMapping("/user/{id}")
    //限流降级
    @SentinelResource(value="user",blockHandler="exceptionHandler",fallback = "getByIdfallback")
    public User getById(@PathVariable Long id){
        int i = (int) (1 / id);	//方法异常,触发熔断
        return new User(id,"zs:"+id, "我是zs");
    }

四.GateWay

没有注解

五.Seata

1、@GlobalTransactional

@GlobalTransactional(name = "fsp-create-order", rollbackFor = Exception.class)
public void create(Order order) {
}

六、SpringCloud常用注解

一.Eureka

二.