Spring注解
注解是JDK1.5之后引入的一个新特性,用于简化Bean配置,可以取代xml配置文件。Spring2.5之后不再使用xml来配置依赖注入,可以使用注解来配置依赖注入。但是有一点要记住的,xml在注入之前通过注解注入后,xml再注入配置时,之前的注解注入的配置将会被重写。
注解 | 描述 |
---|---|
@Required | 应用于 bean 属性的 setter 方法。 |
@Autowired | 应用于 bean 属性的 setter 方法,非 setter 方法,构造函数和属性。 |
@Qualifier | 通过指定确切的将被连线的 bean,@Autowired 和 @Qualifier 注解可以用来删除混乱。 |
JSR-250 | 它包括了 @PostConstruct, @PreDestroy 和 @Resource 注释,这些注解不常用。 |
@Required 注释
@Required 注释应用于 bean 属性的 setter 方法,它表明受影响的 bean 属性在配置时必须放在 XML 配置文件中,否则容器就会抛出一个 BeanInitializationException 异常。
示例:
@Required
public void setName(String name) {
this.name = name;
}
xml内容:
<context:annotation-config/>
<bean id="person" class="com.java.main.required.Person">
<property name="name" value="Tom"/>
</bean>
@Autowired 注释
@Autowired 注释对在哪里和如何完成自动连接提供了更多的细微的控制,可以在 setter 方法中被用于自动连接 bean。当 Spring遇到一个在 setter 方法中使用的 @Autowired
注释,它会在方法中视图执行 byType 自动连接。
属性中的 @Autowired
你可以在属性中使用 @Autowired
注释来除去 setter 方法。当时使用 为自动连接属性传递的时候,Spring 会将这些传递过来的值或者引用自动分配给那些属性。
示例:
@Autowired
private Test1 test1;
构造函数中的 @Autowired
你也可以在构造函数中使用 @Autowired
。一个构造函数 @Autowired
说明当创建 bean 时,即使在 XML 文件中没有使用 元素配置 bean ,构造函数也会被自动连接。
示例:
@Autowired
public void Test(Test1 test1) {
this.test1 = test1;
}
@Autowired 的(required=false)选项
默认情况下,@Autowired
注释意味着依赖是必须的,它类似于@Required
注释,然而,你可以使用 @Autowired 的 (required=false) 选项关闭默认行为。
示例:
@Autowired(required=false)
public void Test(Test1 test1) {
this.test1 = test1;
}
@Qualifier 注释
可能会有这样一种情况,当你创建多个具有相同类型的 bean 时,并且想要用一个属性只为它们其中的一个进行装配,在这种情况下,你可以使用@Qualifier
注释和@Autowired
注释通过指定哪一个真正的 bean 将会被装配来消除混乱。
示例:
@Autowired
@Qualifier("person1")
private Person person;
xml内容:
<context:annotation-config/>
<bean id="profile" class="com.java.main.required.Profile"></bean>
<bean id="person1" class="com.java.main.required.Person">
<property name="name" value="Jack.Ma"/>
<property name="age" value="40"/>
</bean>
<bean id="person2" class="com.java.main.required.Person">
<property name="name" value="Jack.Xie"/>
<property name="age" value="23"/>
</bean>
@PostConstruct 和 @PreDestroy 注释:
@PostConstruct
注解用于需要依赖注入完成以执行任何初始化之后需要执行的方法上。在类投入使用之前必须调用此方法。所有支持依赖注入的类都必须支持该注释。即使该类不要求注入任何资源,也必须调用用PostConstruct注释的方法。
@PreDestroy
注解在方法上用作回调通知,以表明实例正在被容器删除。带有@PreDestroy 注解的方法通常用于释放它一直持有的资源。
@Resource 注释:
你可以在字段中或者 setter 方法中使用@Resource
注释,它和在 Java EE 5 中的运作是一样的。@Resource
注释使用一个 ‘name’ 属性,该属性以一个 bean 名称的形式被注入。你可以说,它遵循 by-name 自动连接语义。如果没有明确地指定一个 ‘name’,默认名称源于字段名或者 setter 方法。在字段的情况下,它使用的是字段名;在一个 setter 方法情况下,它使用的是 bean 属性名称。
@Resource(name = "test")
public void setTest1(Test1 test1) {
this.test1 = test1;
}