@Autowired注解


@Autowired 的使用規則:

  1. 容器中有該類型的候選Bean
  2. 容器中可以含有多個該類型的候選Bean
  3. Spring 3.x 之前Spring容器中只能有一個Bean; 多個Bean報異常BeanCreationException
  4. Spring 3.x以后,可以有多個Bean使用 @Autowired 時變量名一定要和該類型多個Bean 的其中一個相同(即上文中的@Autowired private Student student;,student 就是多個Bean中其中一個bean的id)
  5. 若違反第4條規則,會拋出 BeanCreationException 異常

如下,我們使用的Spring版本大於3.0。

實體類 Student

public class Student{
    private String name;
    //getter and setter...
}

有兩個bean

<bean id="student" class="com.autowiredtest.entity.Student">
    <property name="name" value="小紅"/>
</bean>
<bean id="student02" class="com.autowiredtest.entity.Student">
    <property name="name" value="小明"/>
</bean>

我們在使用@Autowired自動裝配實例時可以這樣寫:

@Autowired
private Student student;

@Autowired
private Student student02;

因為Student 的兩個bean id分別為student和student02,恰好我們的變量名也叫student和student02,故不會報錯。假如變量名為stu沒有對應的bean id,那么就會在使用時拋出異常BeanCreationException。

而如果Spring 使用的版本低於3.0,那么,不允許一個類有多個Bean,即使變量的名稱和bean id相同。

如果非要有多個bean怎么辦呢?

此時,可以結合@Qualifier注解一起使用,@Qualifier注解的作用就是幫助Spring容器找到bean,使用時通過@Qualifier(name="beanid")的name屬性指明要使用哪個bean,所以Spring容器就知道去注入哪個具體的bean了。那么此時Spring容器里可以有這樣的存在:一個類多個bean。

@Qualifier的作用就是消除歧義,指明使用哪個bean。

@Autowired
@Qualifier(name="student02")
private Student stu;

這時候我們也可以使用@Resource注解實現同樣的功能

@Resource(name="student02")
private Student stu;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM