注解:spring-基于注解的配置
本文内容纲要:注解: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教程
本文内容总结:注解:spring-基于注解的配置
原文链接:https://www.cnblogs.com/yanliang12138/p/9728809.html
以上是 注解:spring-基于注解的配置 的全部内容, 来源链接: utcz.com/z/296203.html