前言
上一章谈论了模式注解声明组件(Bean)的应用,这里记录下Spring实例化的一些细节。
实例化
- 通常我们通过@Component和@Autowired声明、使用Bean
public class TestController {
@Autowired
private TestInter testInter;
}
public interface TestInter {
void sayHello();
}
@Component
public class TestOne implements TestInter {
public TestOne () {
System.out.println("TestOne init");
}
@Override
public void sayHello() {
System.out.println("Hello TestOne");
}
}
- 可以看出,默认机制下,应用程序启动时IOC容器就开始实例化对象。
忽略当前要注入的bean
- 当我们注入一个并没有实例化的对象。
//@Component
public class TestOne implements TestInter {
public TestOne () {
System.out.println("TestOne init");
}
}
public class TestController {
@Autowired
private TestInter testInter;
}
- 此时程序抛出异常
- @Autowired(required = false) 忽略当前要注入的bean
public class TestController {
@Autowired(required = false)
private TestInter testInter;
}
- 可看出,程序正常启动
@Lazy 延迟实例化
- 通过@Lazy注解让Bean延迟实例化
public class TestController {
@Autowired
@Lazy
private TestInter testInter;
@GetMapping(value = "/test")
public void test(){
testInter.sayHello();
}
}
@Component
@Lazy
public class TestOne implements TestInter {
public TestOne () {
System.out.println("TestOne init");
}
@Override
public void sayHello() {
System.out.println("Hello TestOne");
}
}