1、@Scope
调整作用域,默认为单实例:
- prototype:多实例的:ioc容器启动并不会去调用方法创建对象放在容器中。每次获取的时候才会调用方法创建对象;
- singleton:单实例的(默认值):ioc容器启动会调用方法创建对象放到ioc容器中。以后每次获取就是直接从容器(map.get())中拿
- request:同一次请求创建一个实例
- session:同一个session创建一个实例
使用如下:
@Scope("prototype")
@Bean("person")
public Person person(){
return new Person("张三", 25);
}
也可以用在类上,表示整个类的作用域
@Scope("prototype")
public class Person {
}
2、@Lazy
单实例bean:默认在容器启动的时候创建对象;
懒加载:容器启动不创建对象。第一次使用(获取)Bean创建对象,并初始化;
使用如下:
//测试类
public class LazeTest {
public LazeTest(){
System.out.println("LazeTest init ... ");
}
}
@Configuration
public class MainConfigOfLifeCycle {
@Bean
@Lazy
public LazeTest lazeTest(){
return new LazeTest();
}
}
测试类:
@Test
public void test01(){
//1、创建ioc容器
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
System.out.println("容器创建完成...");
//applicationContext.getBean("lazeTest");
}
输出结果为空:
当打开注释代码//applicationContext.getBean("lazeTest");
后
LazeTest init ...