Spring Bean的作用域之prototype
程序员文章站
2022-05-24 10:50:06
...
Spring中Bean的默认最用域是单例,即singleton
prototype是只在每次getBean的时候都去重新创建一个对象。下面我们来掩饰一下这种场景
使用SpringBoot项目。创建两个Controller一个service和一个实现类
@Controller
public class HomeController1 {
@Autowired
TestService testService;
// @Lookup
// public TestService getTestService(){
// return null;
// }
@RequestMapping("test1")
public String test(){
System.out.println(testService.hashCode());
return "test";
}
}
@Controller
public class HomeController2 {
@Autowired
TestService testService;
@RequestMapping("test2")
public String test(){
System.out.println(testService.hashCode());
return "test";
}
}
public interface TestService {
public void say();
}
@Service
//@Scope("prototype")
public class TestServiceImpl implements TestService{
@Override
public void say() {
System.out.println("hahhahah");
}
}
当注释掉@Scope注解时我们分别访问localhost:8080/test1可见hashcode的打印都是一样的。当我们放开@Scope注解的注释之后。分别访问localhost:8080/test1和localhost:8080/test2可以看到hashcode是不一样的。但是我们看到多次访问localhost:8080/test1时hashcode是一样的,因为这个时候获取Bean是同一次获取的。
题外话
@Lookup
public TestService getTestService(){
return null;
}
这个可以代替AutoWired自动注入