注解:spring-基于注解的配置
基于注解的配置
除了采用采用xml来配置bean之外,也可以采用注解的方式来定义,注册,加载bean。
注解的方式在spring中默认时不开启的,所以需要在xml文件中进行配置启用
注解的启动方式有下面两种配置:
下面的配置既可以在所有类中启用注解
<context:annotation-config/>
还可以在部分你需要的类中启用注解,这个可以包含一些类,也可以不去扫描一些类
具体的在另外一篇博客事物管理中有讲到。
<context:component-scan base-package="com.b505.common.service.impl" />
@Required
应用于bean的setter方法,当在setter方法上加上这个注释后,表明必须在xml中配置这个属性,不然会抛BeanInitializationException异常
在beans.xml中配置启动注释的两个方式二选一,在本例中,都不配置的话,程序照样不会出错,这是因为这样就不会启用注解配置了
而是xml配置,
<context:annotation-config/> <!-- 这两个配置2选1 --> <!-- <context:component-scan base-package="com.test.Student" /> --> <bean id="student" class="com.test.Student"> <property name="name" value="zara"></property> <property name="age" value="11"></property> </bean>
Student.java实体类
public class Student { private Integer age; private String name; @Required public void setAge(Integer age) { System.out.println("**setAge(Integer age) "+age); this.age = age; } @Required public void setName(String name) { System.out.println("**setName(String name) "+name); this.name = name; }
@Autowired
setter方法上的@Autowired
在setter方法上加上@Autowored注解后,spring容器会试图以“byType”的方式去连接bean
这中间就涉及到一个问题,若是我们在bean中有多个相同的type的bean,会报错的。
beans.xml
<context:annotation-config/> <bean id="money1" class="com.test.Money1"></bean> <bean id="student" class="com.test.Student"> <property name="name" value="zara"></property> <property name="age" value="11"></property> </bean>
Student.java
@Autowired public void setMoney(Money money) { System.out.println("**setMoney(Money money) "+money); this.money = money; }
在属性上面应用@Autowired
可以消除java代码中的setter方法,若是定义了setter方法,在注入bean时也不是通过这个setter方法的。
@Autowired private Money money;
在构造函数上使用@Autowired
<context:annotation-config/> <bean id="student" class="com.test.Student"> </bean> <bean id="money2" class="com.test.Money2"></bean>
Student.java
@Autowired public Student(Money money){ System.out.println("***Student(Money money)"); this.money=money; }
@qualifiler注释
beans.xml
在beans.xml中有两个类型相同的bean,money1和money2,当你需要注入时,就又能会不知道注入哪一个而抛异常,这时就用到@qualifiler注解了
<context:annotation-config/> <bean id="student" class="com.test.Student"> </bean> <bean id="money1" class="com.test.Money1"></bean> <bean id="money2" class="com.test.Money2"></bean>
Studen.java
这样指定了注入的bean为money2(id号)
@Autowired @Qualifier("money2") public void setMoney(Money money) { System.out.println("**setMoney(Money money) "+money); this.money = money; }
spring Jsr-250注释
@Resource
他类似于遵循“by-name”的方式,找到id=“money2”的bean进行注入。
Student.java
@Resource(name="money2") public void setMoney(Money money) { System.out.println("**setMoney(Money money) "+money); this.money = money; }
参考文章:w3cschool教程