一.@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”)注解后,变为多例模式。