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/> 进行配合.