Spring注解详解

@Autowired 注释

Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。

Spring 通过一个 BeanPostProcessor @Autowired 进行解析,所以要让@Autowired 起作用必须事先在 Spring 容器中声明AutowiredAnnotationBeanPostProcessor Bean

 <!-- BeanPostProcessor 将自动起作用,对标注 @Autowired Bean 进行自动注入 -->

<bean class="org.springframework.beans.factory.annotation.        AutowiredAnnotationBeanPostProcessor"/>

@Qualifier 注释指定注入 Bean 的名称

@Autowired

public void setOffice(@Qualifier("office")Office office) {  this.office = office;}

@Qualifier 只能和 @Autowired 结合使用,是对 @Autowired 有益的补充。一般来讲,@Qualifier 对方法签名中入参进行注释会降低代码的可读性,而对成员变量注释则相对好一些。

@Resource

@Resource 的作用相当于 @Autowired,只不过 @Autowired byType 自动注入,面@Resource 默认按 byName 自动注入罢了。@Resource 有两个属性是比较重要的,分别是 name typeSpring @Resource 注释的 name 属性解析为 Bean 的名字,而 type 属性则解析为 Bean 的类型。所以如果使用 name 属性,则使用 byName 的自动注入策略,而使用 type 属性时则使用 byType 自动注入策略。如果既不指定 name 也不指定 type 属性,这时将通过反射机制使用 byName 自动注入策略。

例:@Resource @Resource(name = "office")

一般情况下,我们无需使用类似于 @Resource(type=Car.class) 的注释方式,因为 Bean 的类型信息可以通过 Java 反射从代码中获取。

要让 JSR-250 的注释生效,除了在 Bean 类中标注这些注释外,还需要在 Spring 容器中注册一个负责处理这些注释的 BeanPostProcessor

<bean   class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/>

CommonAnnotationBeanPostProcessor 实现了 BeanPostProcessor 接口,它负责扫描使用了 JSR-250 注释的 Bean,并对它们进行相应的操作。

@PostConstruct

@PreDestroy

JSR-250 为初始化之后/销毁之前方法的指定定义了两个注释类,分别是 @PostConstruct @PreDestroy,这两个注释只能应用于方法上。标注了 @PostConstruct 注释的方法将在类实例化后调用,而标注了 @PreDestroy 的方法将在类销毁之前调用。

 

XML 配置文件中完全移除 Bean 定义的配置有:

@Component、

@Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。

@Service、

@Service 通常作用在业务层,但是目前该功能与 @Component 相同。

@Constroller

@Constroller 通常作用在控制层,但是目前该功能与 @Component 相同。

@Repository

同上

 <context:component-scan base-package="com.zap.demo2.controller" />

xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean

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