zoukankan      html  css  js  c++  java
  • 注解: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教程

  • 相关阅读:
    最优二叉查找树
    最长公共子序列问题
    最大子段和问题
    01背包问题
    浅析LRU(K-V)缓存
    LeetCode——LRU Cache
    LeetCode——Gas Station
    LeetCode——Jump Game II
    LeetCode——Jump Game
    LeetCode——Implement Trie (Prefix Tree)
  • 原文地址:https://www.cnblogs.com/yanliang12138/p/9728809.html
Copyright © 2011-2022 走看看