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