Spring中@Resource的多例模式


一.@Resource的作用域

@Resource對象注入默認是單例模式,即全局唯一。

當我們需要得到多例模式的對象注入時,可以在注入的類上加上@Scope(“prototype”)注解去改變Bean的作用域為多例。

二.示例代碼

1.創建一個User類:

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Component
/*@Scope("prototype")*/
public class User {
    private Integer id;
    private String name;
    private Integer age;
    private String sex;
}

此時不加@Scope(“prototype”)注解。

2.創建一個Test1類,並注入User對象,通過test()方法打印注入的對象:

@Component
public class Test1 {
    @Resource
    User user;

    public void test(){
        System.out.println(user);
    }
}

3.在測試中,將如上兩個類同時注入,並分別打印兩個注入的User對象,觀察是否為同一個對象:

@SpringBootTest
class Demo1ApplicationTests {
    @Resource
    User user;
    @Resource
    Test1 test1;

    @Test
    void test(){
        System.out.println(user);
        test1.test();
    }
}

從控制台可以看出兩個對象是同一個對象。

4.將1中的@Scope(“prototype”)注解加入到User類中,重新測試一次:

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Component
@Scope("prototype")
public class User {
    private Integer id;
    private String name;
    private Integer age;
    private String sex;
}

從打印結果可以看出,加入了@Scope(“prototype”)注解后,變為多例模式。


免責聲明!

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



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