Spring注解归纳总结
分类
组件注解(声明bean的注解) |
|
@Component |
组件,没有明确的角色 |
@Controller |
在展现层使用,控制器的声明 |
@Service |
在业务逻辑层使用(service层) |
@Repository |
在数据访问层使用(dao层) |
@Component(“xxx”)
指定某个类是容器的bean,@Component(value="xx")相当于<bean id="xx" />,其中value可以不写。用于标注类为容器bean的注解有四个,主要用于区别不同的组件类,提高代码的可读性
@Component,用于标注一个普通的类
@Controller 用于标注一个控制器类
@Service 用于标注业务逻辑类
@Repository 用于标注DAO数据访问类
现在这几个注解没有什么区别,尽量根据类的不同功能选择合适的注解。
注解用于修饰类,当不写value属性值时,默认值为类名首字母小写。
组件扫描注解 |
|
@ComponentScan |
用于对Component进行扫描,相当于xml中的context:component-scan/(类上) |
自动装配(注入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,替代xml中的方式(方法上) |
@Scope |
设置Spring容器如何新建Bean实例(方法上,得有@Bean) |
@DependsOn |
该注解也是配合@Component这类注解使用,用于强制初始化其他bean |
@Lazy |
|
@PostConstruct |
(singleton作用域)的生命周期的行为注解 |
@PreDestroy |
(singleton作用域)的生命周期的行为注解 |
-
@Bean(name=“xxx”)
修饰方法,该方法的返回值定义为容器中的bean。该注解相当于<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="">
该注解是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配置类相关注解 |
|
@Configuration |
修饰一个Java类,被修饰的类相当于一个xml文件,相当于< beans> </ 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等类型(方法上,需先开启计划任务的支持) |
这些注解主要用来开启对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部分 |
|
@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 |
用于解决跨域问题,只需在接口上进行声明即可,替代过虑器或拦截方式。 |
版权声明:文章内容总结于网络,如侵犯到原作者权益,请与我联系删除或授权事宜