Spring 注解详解02

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring 注解详解02相关的知识,希望对你有一定的参考价值。

原文: http://www.cnblogs.com/digdeep/p/4525567.html

 

spring 的 bean 容器相关的注解:
1) @Autowired 是我们使用得最多的注解, 其实就是 autowire=byType 就是根据类型的自动注入依赖(基于注解的依赖注入), 
可以被使用在属性域, 方法, 构造函数上.

2) @Qualifier 就是 autowire=byName, @Autowired 注解判断多个bean类型相同时, 
就需要使用 @Qualifier("xxBean") 来指定依赖的bean的id:
@Controller
@RequestMapping("/user")
public class HelloController {
    @Autowired
    @Qualifier("userService")
    private UserService userService;

3) @Resource 属于JSR250标准, 用于属性域额和方法上.也是 byName 类型的依赖注入.
使用方式:@Resource(name="xxBean"). 不带参数的 @Resource 默认值类名首字母小写.
相当于:
    @Autowired
    @Qualifier("xxBean")

4) JSR-330 标准 javax.inject.* 中的注解
(@Inject, @Named, @Qualifier, @Provider, @Scope, @Singleton).
@Inject就相当于@Autowired, @Named 就相当于 @Qualifier, 另外 @Named 用在类上还有 @Component的功能.

5) @Component,  @Controller, @Service, @Repository, 这几个注解不同于上面的注解, 
上面的注解都是将被依赖的bean注入进入, 而这几个注解的作用都是生产bean, 这些注解都是注解在类上, 
将类注解成spring的bean工厂中一个一个的[email protected], @Service, @Repository基本就是语义更加细化的@Component.

6) @PostConstruct 和 @PreDestroy 不是用于依赖注入, 而是bean 的生命周期.
类似于 init-method(InitializeingBean) destory-method(DisposableBean)

4. spring中注解的处理
spring中注解的处理基本都是通过实现接口 BeanPostProcessor 来进行的:
public interface BeanPostProcessor {
    Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;
    Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;
}
相关的处理类有: AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor, 
PersistenceAnnotationBeanPostProcessor,   RequiredAnnotationBeanPostProcessor
这些处理类, 可以通过 <context:annotation-config/> 配置隐式的配置进spring容器.这些都是依赖注入的处理, 
还有生产bean的注解(@Component,  @Controller, @Service, @Repository)的处理:
<context:component-scan base-package="net.aazj.service,net.aazj.aop" />
这些都是通过指定扫描的基包路径来进行的, 将他们扫描进spring的bean容器.
注意 context:component-scan 也会默认将 AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor 
配置进来.所以<context:annotation-config/>是可以省略的.另外context:component-scan也可以扫描@Aspect风格的AOP注解, 
但是需要在配置文件中加入 <aop:aspectj-autoproxy/> 进行配合.

 

以上是关于Spring 注解详解02的主要内容,如果未能解决你的问题,请参考以下文章

基于XML和注解的Spring定时器

详解spring boot mybatis全注解化

spring注解注入:<context:component-scan>详解(转)

Java开发Spring之IOC详解第二篇(注解开发JdbcTemplatem模板Junit整合)

Spring-IOC容器-Bean管理-基于注解方式详解

Spring @Qualifier @Resource注解详解