Spring注解大全

Spring注解归纳总结

分类

组件注解(声明bean的注解)

组件注解(声明bean的注解)
@Component 组件,没有明确的角色
@Controller 在展现层使用,控制器的声明
@Service 在业务逻辑层使用(service层)
@Repository 在数据访问层使用(dao层)

@Component(“xxx”)
指定某个类是容器的bean,@Component(value="xx")相当于,其中value可以不写。用于标注类为容器bean的注解有四个,主要用于区别不同的组件类,提高代码的可读性
@Component,用于标注一个普通的类
@Controller 用于标注一个控制器类
@Service 用于标注业务逻辑类
@Repository 用于标注DAO数据访问类
现在这几个注解没有什么区别,尽量根据类的不同功能选择合适的注解。
注解用于修饰类,当不写value属性值时,默认值为类名首字母小写。



组件扫描注解

组件扫描注解
@ComponentScan 用于对Component进行扫描,相当于xml中的context:component-scan/(类上)


自动装配(注入bean的注解)

自动装配(注入bean的注解)
@Resource 由JSR-250提供
@Autowired 组件,没有明确的角色
@Inject 由JSR-330提供
  • @Resource(name=“xx”)
    @Resource 可以修饰成员变量也可以修饰set方法。当修饰成员变量时可以不写set方法,此时spring会直接使用j2ee规范的Field注入。
    @Resource有两个比较重要的属性,name和type

    • 如果指定了name和type,则从Spring容器中找到唯一匹配的bean进行装配,找不到则抛出异常;
    • 如果指定了name,则从spring容器查找名称(id)匹配的bean进行装配,找不到则抛出异常;
    • 如果指定了type,则从spring容器中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常;
    • 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配
    • 如果没有写name属性值时
      • 修饰成员变量,此时name为成员变量名称
      • 修饰set方法,此时name 为set方法的去掉set后首字母小写得到的字符串
  • @Autowired(required=false)
    @Autowired可以修饰构造器,成员变量,set方法,普通方法。@Autowired默认使用byType方式自动装配。required标记该类型的bean是否时必须的,默认为必须存在(true)。
    可以配合@Qualifier(value="xx"),实现按beanName注入。

    • required=true(默认),为true时,从spring容器查找和指定类型匹配的bean,匹配不到或匹配多个则抛出异常
    • 使用@Qualifier("xx"),则会从spring容器匹配类型和 id 一致的bean,匹配不到则抛出异常
    • @Autowired修饰成员变量。该类型为成员变量类型
    • @Autowired修饰方法,构造器。注入类型为参数的数据类型,当然可以有多个参数


bean相关注解(Bean的属性支持)

bean相关注解(Bean的属性支持)
@Bean 注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式(方法上)
@Scope 设置Spring容器如何新建Bean实例(方法上,得有@Bean)
@DependsOn 该注解也是配合@Component这类注解使用,用于强制初始化其他bean
@Lazy
@PostConstruct (singleton作用域)的生命周期的行为注解
@PreDestroy (singleton作用域)的生命周期的行为注解
  • @Bean(name=“xxx”)
    修饰方法,该方法的返回值定义为容器中的bean。该注解相当于元素
    常用的属性

    • name:bean id 。name可以省略,省略时name值为方法名。
    • autowire: 是否自动注入,默认Autowire . NO
    • initMethod:bean的初始化方法。在依赖注入之后执行< bean id="" init-method="">
    • destroyMethod: spring容器关闭时bean调用的方法 < bean id="" destroty-method="">
    • 当然@Bean还可以配合@Scope指定bean的作用域
  • @Scope(“prototype”)
    该注解和@Component这一类注解联合使用,用于标记该类的作用域,默认singleton。也可以和@Bean一起使用,此时@Scope修饰一个方法。

  • @Lazy(true)
    指定bean是否延时初始化,相当于< bean id="xx" lazy-init=""> ,默认false。@Lazy可以和@Component这一类注解联合使用修饰类,也可以和@Bean一起使用修饰方法
    注:此处初始化不是指不执行init-method,而是不创建bean实例和依赖注入。只有当该bean(被@Lazy修饰的类或方法)被其他bean引用(可以是自动注入的方式)或者执行getBean方法获取,才会真正的创建该bean实例,其实这也是BeanFactory的执行方式。

  • @PostConstructor和@PreDestroy
    @PostConstructor和@PreDestroy这两个注解是j2ee规范下的注解。这两个注解用于修饰方法,spring用这两个注解管理容器中spring生命周期行为。
    @PostConstructor 从名字可以看出构造器之后调用,相当于< bean init-method="">。就是在依赖注入之后执行
    @PreDestroy 容器销毁之前bean调用的方法,相当于 < bean destroy-method="">



AOP 相关注解

该注解是AspectJ中的注解,并不是spring提供的,所以还需要导入aspectjweaver.jar,aspectjrt.jar,除此之外还需要依赖aopalliance.jar

AOP 相关注解
@Aspect 修饰Java类,指定该类为切面类。当spring容器检测到某个bean被@Aspect修饰时,spring容器不会对该bean做增强处理(bean后处理器增强,代理增强)
@Before 修饰方法,before增强处理。有一个value属性用于指定切入点表达式。用于对目标方法(切入点表达式指定方法)执行前做增强处理。可以用于权限检查,登陆检查
@AfterReturning 修饰方法,afterreturning增强处理。目标方法正常结束后做增强处理常用属性 1、{pointcut/value:定义切入点} 2、{returning:指定一个参数名,用于接受目标方法正常结束时返回的值。在增强方法中定义同名的参数。}
@AfterThrowing 修饰方法,afterthrowing增强处理。当目标程序方法抛出 异常或者异常无法捕获时,做增强处理。常用属性:1、{pointcut/value :指定切入点表达式}2、{throwing:指定一个形参,在增强方法中定义同名形参,用于访问目标方法抛出的异常}
@After 修饰方法 ,after增强处理。无论方法是否正常结束,都会调用该增强处理(@After= @AfterReturning+@AfterThrowing)。一般用于释放资源。有一个value属性,用于指定切入点表达式。
@Around 修饰方法, around增强处理。该处理可以目标方法执行之前和执行之后织入增强处理,可以看作时@Before和@AfterReturning的总和。有一个value属性,指定切入点表达式。Around增强处理通常需要在线程安全的环境下使用,如果@Before和@AfterReturning可以处理就没必要使用@After Returning。当定义一个Aound增前处理时,增强方法第一形参需要时ProceedingJoinPoint类型。ProceedingJoin Point有一个Object proceed()方法,用于执行目标方法,返回对象当然也可以为目标方法传递数组参数。
@Pointcut 声明切点在java配置类中使用@EnableAspectJAutoProxy注解开启Spring对AspectJ代理的支持(类上)
@Order 当不同的切面中的两个增强处理需要在同一个连接点被织入时,spring aop可以指定不同切面类的增强处理优先级。有一个value属性,指定一个int值,属性值越小优先级越高。


Java配置类相关注解

Java配置类相关注解
@Configuration 修饰一个Java类,被修饰的类相当于一个xml文件,相当于< beans> 在springboot中大量使用了该注解,该注解提供了一种使用Java类方式配置bean。
@Import @Import({xxx.class})修饰Java类,用于向当前配置类导入其他java配置类
@ImportResource @ImportResource(”classpath: /aa.xml“)修饰Java类,用于向当前注解类导入xml配置文件
@Value @Value("${expression}")修饰成员变量或者 方法构造器的参数,常用于注入属性文件中的值。注意:@Value不能对 static 属性注入。
@ConfigurationProperties 用于从属性文件中注入值 ,修饰类
@PropertySource 用于加载配置文件
  • @PropertySource(value=“classpath:jdbc.properties”)
    用于加载配置文件
    存在的属性:
    • ignoreResourceNotFound: 当资源文件找不到的时候是否会忽略改配置,一般用于可选项
    • encoding : 资源文件使用什么编码方式


环境切换

环境切换
@Profile 通过设定Environment的ActiveProfiles来设定当前context需要使用的配置环境。(类或方法上)
@Conditional Spring4中可以使用此注解定义条件话的bean,通过实现Condition接口,并重写matches方法,从而决定该bean是否被实例化。(方法上)


异步相关

异步相关
@EnableAsync 配置类中,通过此注解开启对异步任务的支持,叙事性AsyncConfigurer接口(类上)
@Async 在实际执行的bean方法使用该注解来申明其是一个异步任务(方法上或类上所有的方法都将异步,需要@EnableAsync开启异步任务)


定时任务相关

定时任务相关
@EnableScheduling 在配置类上使用,开启计划任务的支持(类上)
@Scheduled 来申明这是一个任务,包括cron,fixDelay,fixRate等类型(方法上,需先开启计划任务的支持)


Enable注解说明

这些注解主要用来开启对xxx的支持。

Enable注解说明
@EnableAspectJAutoProxy 开启对AspectJ自动代理的支持
@EnableAsync 开启异步方法的支持
@EnableScheduling 开启计划任务的支持
@EnableWebMvc 开启Web MVC的配置支持
@EnableConfigurationProperties 开启对@ConfigurationProperties注解配置Bean的支持
@EnableJpaRepositories 开启对SpringData JPA Repository的支持
@EnableTransactionManagement 开启注解式事务的支持
@EnableCaching 开启注解式的缓存支持


测试相关注解

测试相关注解
@RunWith 运行器,Spring中通常用于对JUnit的支持 @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration 用来加载配置ApplicationContext,其中classes属性用来加载配置类 @ContextConfiguration(classes={TestConfig.class})


SpringMVC部分

SpringMVC部分
@EnableWebMvc 在配置类中开启Web MVC的配置支持,如一些ViewResolver或者MessageConverter等,若无此句,重写WebMvcConfigurerAdapter方法(用于对SpringMVC的配置)。
@Controller 声明该类为SpringMVC中的Controller
@RequestMapping 用于映射Web请求,包括访问路径和参数(类或方法上)
@ResponseBody 支持将返回值放在response内,而不是一个页面,通常用户返回json数据(返回值旁或方法上)
@RequestBody 允许request的参数在request体中,而不是在直接连接在地址后面。(放在参数前)
@PathVariable 用于接收路径参数,比如@RequestMapping("/hello/{name}")申明的路径,将注解放在参数中前,即可获取该值,通常作为Restful的接口实现方法。
@RestController 该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody。
@ControllerAdvice 通过该注解,我们可以将对于控制器的全局配置放置在同一个位置,注解了@Controller的类的方法可使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上,
这对所有注解了 @RequestMapping的控制器内的方法有效。
@ExceptionHandler 用于全局处理控制器里的异常
@InitBinder 用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中。
@ModelAttribute 本来的作用是绑定键值对到Model里,在@ControllerAdvice中是让全局的@RequestMapping都能获得在此处设置的键值对。
@CrossOrigin 用于解决跨域问题,只需在接口上进行声明即可,替代过虑器或拦截方式。

版权声明:文章内容总结于网络,如侵犯到原作者权益,请与我联系删除或授权事宜

你可能感兴趣的:(Spring注解大全)