1、通过构造器实例化Bean
<!-- 1.通过构造器实例化bean,id和name属性都指定Bean对象的名称,方便从Spring容器中查找相应的Bean
class属性用于指定Bean类型,会自动调用无参构造创建对象 -->
<bean id="obj1" class="java.util.GregorianCalendar"></bean>
// 通过构造器实例化bean
@Test
public void test2() {
String conf = "applicationContext.xml";
// 实例化Spring容器
ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
// 通过id或name属性指定的名称获取Bean
Calendar bean = (Calendar) ac.getBean("obj1");
System.out.println(bean);
}
2、通过静态工厂实例化Bean
<!-- 2.通过静态工厂实例化bean,id指定Bean名称;class指定工厂类型;factory-method
指定工厂中创建Bean对象的方法,必须用static修饰的方法 -->
<bean id="obj2" class="java.util.GregorianCalendar" factory-method="getInstance"/>
// 通过静态工厂实例化bean
@Test
public void test3() {
String conf = "applicationContext.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
Calendar bean = ac.getBean("obj2", Calendar.class);
System.out.println(bean);
}
3、通过实例工厂方法实例化Bean
<!-- 3.通过实例工厂方法实例化bean,id指定Bean对象名称;factory-bean属性指定工厂Bean对象;
factory-method指定工厂中创建Bean对象的方法 -->
<bean id="obj3" class="java.util.GregorianCalendar"/>
<bean id="obj4" factory-bean="obj3" factory-method="getTime"/>
// 通过实例工厂方法实例化bean
@Test
public void test4() {
String conf = "applicationContext.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
Date bean = ac.getBean("obj4", Date.class);
System.out.println(bean);
}
Bean的作用域:
通过中的scope属性可以指定Bean作用域
Bean的生命周期
Spring容器默认在初始化时将所有人都singleton bean提前进行实例化,如果不想让bean被提前实例化,可以通过设置lazy-init="true"来改变,这样这个bean会在第一次被调用时在进行实例化,适用于使用频率很低的singleton对象.
public class ExampleBean implements Serializable{
private static final long serialVersionUID = 1L;
public ExampleBean() {
System.out.println("实例化ExampleBean:"+this);
}
public void init() {
System.out.println("初始化ExampleBean");
}
public void destory() {
System.out.println("销毁ExampleBean");
}
public void execute() {
System.out.println("执行execute方法");
}
}
lazy-int属性为false时,实例化容器是bean就会被初始化
lazy-init属性为ture时,调用bean是bean才会被初始化(懒加载)