Spring Bean的作用域之prototype

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

你可能感兴趣的:(SpringBoot)