欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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自动注入