一、Spring框架Bean实例化的方式:
*构造方法实例化(默认无参)
public class Bean01 {
public static void main(String[] args) {
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("applicationContext.xml");
Bean01 bean01 = (Bean01)applicationContext.getBean("bean01");
System.out.println(bean01);
}
}
<bean id = "bean01" class ="com.dejun.spring.demoBean.Bean01" ></bean>
结果:
*静态工厂实例化
public class Bean02Factory {
/*
* 静态工厂方法
*/
public static Bean02 getBean2(){
System.out.println("静态工厂获得Bean2的方法");
return new Bean02();
}
}
<bean id = "bean02" class = "com.dejun.spring.demoBean.Bean02Factory"
factory-method = "getBean2"></bean>
*实例工厂实例化
这里的bean03和上面的都一样,只是getBean03()的方法没有加静态而已
<bean id = "bean03f" class = "com.dejun.spring.demoBean.Bean03Factory"></bean>
<bean id = "bean03" class = "com.dejun.spring.demoBean.Bean03"
factory-bean = "bean03f" factory-method = "getBean03"></bean>
这里要注意,由于不是静态的的,所以不能直接调用这个get方法,必须实例一个BeanFactory的对象,这里是通过无参构造方法的方式,也就是方式一实现的,然后才能用工厂方式,否则会报错。并且还亚欧指定好factory-bean。
(2、3的区别主要是工厂方法是不是static的)
二、Bean标签的其他配置:
类的作用范围,
singleton:在Spring Ioc容器中仅存在一个Bean实例,Bean以单例方式存在,是默认值,容器初始化时就创建bean实例;
prototype:容器初始化时不创建bean实例,而是在每次容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行new XxxBean();
request:每次HTTP请求都会创建一个新的Bean,该作用于仅适用于WebApplicationContext环境;
session:同一个HTTP Session 共享一个Bean,不同Session使用不同Bean,仅适用于WebApplicationContext环境;
globalSession:一般用于Porlet应用环境,该作用域仅适用于WebApplicationContext环境。
(具体代码就不写了,就是在ApplicationContext.xml文件的bean标签中添加一个scope属性,设置后就可以了)