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工厂中一个一个的bean.@Controller, @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/> 进行配合.

 

posted on 2017-09-02 21:36  程序员修仙之路  阅读(202)  评论(0编辑  收藏  举报