注解: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教程

posted @ 2018-09-30 11:38  弱水三千12138  阅读(511)  评论(0编辑  收藏  举报