有些注解虽然在Springboot广泛应用,但是却不属于Springboot,在Spring就已经生产了出来

          Spring 3.0 之后就已经开始应用这种去配置化策略了

Spring Boot  3个主要注解

1、@Configuration   用来代替 applicationContext.xml 配置文件,所有这个配置文件里面能做到的事情都可以通过这个注解所在类来进行注册。

2、@ComponentScan  用来代替配置文件中的 component-scan 配置,开启组件扫描,即自动扫描包路径下的 @Component 注解进行注册 bean 实例到 context 中。

3、@EnableAutoConfiguration   Spring Boot 诞生时添加的注解,用来提供自动配置

此上在Spring boo中被@SpringBootApplication统一包含

 

声明bean注解

注解

描述

@Component

可以在多个层面使用,主要作用就是把普通的pojo放到Spring容器里面,使之能直接在上下文中获取


类似于:@Bean <bean id="" class=""/>

@Service

@Component的派生子类,在业务逻辑层(service层)使用

@Service
public class UserServiceImpl implements UserService {

            .......

}

 

@Repository

@Component的派生子类,在数据访问层(dao层)使用.

@Repository("userDAO")  
public class UserDAOImpl implements IUserDAO {  
      
   .......
}

@Repository 来自Spring的注解

@Mapper 来自Mybatis的注解

现在很多都喜欢用SSM这种架构,所以经常出现@Repository用注入不了的情况,所以不妨试试@Mapper

@Controller

@Component的派生子类,在控制层controller层使用

@RestController注解相当于@ResponseBody + @Controller合在一起的作用。

1) 如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。

 

2) 如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
    如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。

 所以不要搞混乱了

注入bean的注解

注解

描述

@Inject

@Inject是JSR330中的规范,需要导入javax.inject.Inject;实现注入。是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Named;可以作用在变量、setter方法、构造函数上

@Named

@Named("XXX") 中的 XX是 Bean 的名称,所以 @Inject和 @Named结合使用时,自动注入的策略就从 byType 转变成 byName 了。

@Autowired

@Autowired是spring自带的注解,通过‘AutowiredAnnotationBeanPostProcessor’ 类实现的依赖注入,是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Qualifier,有个属性为required,可以配置为false,如果配置为false之后,当没有找到相应bean的时候,系统不会抛错,可以作用在变量、setter方法、构造函数上

@Qualifier

@Qualifier("XXX") 中的 XX是 Bean 的名称,所以 @Autowired 和 @Qualifier 结合使用时,自动注入的策略就从 byType 转变成 byName 了。不过需要注意的是@Autowired 可以对成员变量、方法以及构造函数进行注释,而 @Qualifier 的标注对象是成员变量、方法入参、构造函数入参。

@Resource

是JSR250规范的实现,需要导入javax.annotation实现注入,是根据名称进行自动装配的,一般会指定一个name属性,可以作用在变量、setter方法上。

@Enable*注解

注解

描述

@EnableAsync

开启异步任务的支持(多线程)

@EnableScheduling

开启对计划任务的支持(定时器)

@EnableWebMVC

开启对Web MVC 的配置支持

@EnableAaspectJAutoProxy

开启Spring 对 这个切面(Aspect )的支持

@EnableConfigurationProperties

开启对@ConfigurationProperties注解配置Bean的支持

@EnableJpaRepositories

开启对Spring Data JAP Repository 的支持

@EnableTransactionManagement

开启对注解式事物的支持

@EnableCaching

开启注解是缓存的支持.

@EnableDiscoveryClient

让服务发现服务器,使用服务器.Spring cloud 实现服务发现

@EnableEurekaServer

注册服务器 spring cloud 实现服务注册

@EnableScheduling

让spring可以进行任务调度,功能类似于spring.xml文件中的命名空间

@EnableCaching

开启Cache缓存支持

AOP切面编程注解

注解

描述

@Aspect

切面,经常用来织入一些中间件处理一些逻辑什么的

spring boot扫描自定义注解 springboot怎么扫描注解_spring boot扫描自定义注解

如上织入日志什么的

@After @Before. @Around

定义切面,可以直接将拦截规则(切入点 PointCut)作为参数

也可参照@Aspect以上那张图片

@AfterReturning

类似于使用@Before注解可以修饰Before增强处理,使用@AfterReturning可修饰AfterReturning增强处理,AfterReturning增强处理将在目标方法正常完成后被织入。

value值: 可以写Aop的表达式,如execution、args、within等,多个之间使用&& || !作为连接; 也可以使用引用其他Pointcut;

         pointcut值:和value值用法一样

         returning值:给被增强方法返回值取个名字,给后面引用;

         argNames值:方法入参的名字,Spring4.2.x测试时候发现写不写都可以实现Aop

 

@PointCut

专门定义拦截规则 然后在 @After @Before. @Around 中调用

@Transcational

事务处理 

默认遇到throw new RuntimeException(“…”);会回滚 
需要捕获的throw new Exception(“…”);不会回滚

@Transactional(rollbackFor=Exception.class) 
    public void rollbackTest() {
       // 不会回滚
       throw new Exception("...");
    }

如此指定就可以回滚

@Cacheable

数据缓存

spring boot扫描自定义注解 springboot怎么扫描注解_Spring注解_02

@EnableAaspectJAutoProxy

开启Spring 对 这个切面(Aspect )的支持

@Target (ElementType.TYPE)

元注解,用来指定注解修饰类的那个成员 -->指定拦截规则

@Retention(RetentionPolicy.RUNTIME)

当定义的注解的@Retention为RUNTIME时,才能够通过运行时的反射机制来处理注解.-->指定拦截规则

Spring 常用配置

注解

描述

@import

导入配置类

@Scope

新建Bean的实例

@PostConstruct

在构造函数执行完之后执行

@PreDestroy

在 Bean 销毁之前执行

@ActiveProfiles

用来声明活动的 profile

@profile

为不同环境下使用不同的配置提供了支持

@Profile("dev") .......对方法名为 dev-xxxx的方法提供实例化Bean

@EnableAsync

开启异步任务的支持(多线程)

@Asyns

声明这是一个异步任务,可以在类级别 和方法级别声明.

@EnableScheduling

开启对计划任务的支持(定时器)

@Scheduled

声明这是一个计划任务 支持多种计划任务,包含 cron. fixDelay fixRate

@Scheduled (dixedDelay = 5000) 通过注解 定时更新

@Conditional

条件注解,根据满足某一特定条件创建一个特定的Bean

@WebAppCofiguration

指定加载 ApplicationContext是一个WebApplicationContext

@ContextConfiguration

加载配置文件@ContextConfiguration(classes = {TestConfig.class})@ContextConfiguration用来加载ApplicationContext classes属性用来加载配置类

 

@ControllerAdvice

  1. 全局异常处理
  2. 全局数据绑定
  3. 全局数据预处理

 

@ExceptionHandler

主要在于声明一个或多个类型的异常,当符合条件的Controller抛出这些异常之后将会对这些异常进行捕获,然后按照其标注的方法的逻辑进行处理,从而改变返回的视图信息

@ModelAttribute

处理用于接口参数可以用于转换对象类型的属性之外,其还可以用来进行方法的声明。如果声明在方法上,并且结合@ControllerAdvice,该方法将会在@ControllerAdvice所指定的范围内的所有接口方法执行之前执行,并且@ModelAttribute标注的方法的返回值还可以供给后续会调用的接口方法使用

@ResponseStatus

@ResponseStatus有两个参数

1、value

对应枚举HttpStatus的值,此值对应相应404,403,500

2、reason

界面提示文字

重点: 如果只是想添加返回的状态码,一定不要写reason,因为只要加上reason无论程序是否报错,都会抛出错误

此注解加在方法上,用来指定此方法的返回值

如果方法抛出异常,则返回值是异常的返回值,如果方法正常执行完毕,返回值是此注解所写的返回值。

@InitBinder

主要作用是绑定一些自定义的参数。一般情况下我们使用的参数通过@RequestParam,@RequestBody或者@ModelAttribute等注解就可以进行绑定了,但对于一些特殊类型参数,比如Date,它们的绑定Spring是没有提供直接的支持的,我们只能为其声明一个转换器,将request中字符串类型的参数通过转换器转换为Date类型的参数,从而供给@RequestMapping标注的方法使用

@Value

放置在字段、方法和方法/构造函数参数上,以指定默认值。