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