加载配置文件两种方式:
ClassPathXmlApplicationContext:它是只能加载类路径下的配置文件 (极力推荐使用)
FileSystemXmlApplicationContext:它是可以加载任意路径下的配置文件
Spring容器创建Bean的两种规则:1.即时加载(ApplicationContext)2.延时加载(BeanFactory)
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
即时加载方式,只要解析完配置文件,就立马加载。
Resource resource = new ClassPathResource("bean.xml");
BeanFactory factory = new XmlBeanFactory(resource); 延时加载方式,什么时候用,什么时候加载
配置bean的方式有三种:
第一种方式:调用默认无参构造函数创建 此种方式用的最多 默认情况下,如果类中没有默认无参构造函数,则创建失败,会报异常
第二种方式:使用静态工厂中的方法创建对象,需要使用bean标签的factory-method属性,指定静态工厂中创建对象的方法
第三种方式:使用实例工厂中的方法创建
<!--第一种,直接通过类名反射,调用无参构造方法创建对象-->
<bean id="customerService" class="com.dimples.service.impl.CustomerServiceImpl"></bean>
<!--第二种,通过静态工厂的方式获取bean对象-->
<bean id="staticCustomerService" class="com.dimples.factory.StaticFactory" factory-method="getCustomer"/>
<!--通过实例工厂的模式获取bean对象-->
<bean id="insFactory" class="com.dimples.factory.InstanceFactory"></bean>
<bean id="insCustomer" factory-bean="insFactory" factory-method="getCustomer"/>
第二种的静态工厂类:
public class StaticFactory {
public static CustomerServiceImpl getCustomer() {
return new CustomerServiceImpl();
}
}
第三种的实例工厂类:
public class InstanceFactory {
public CustomerServiceImpl getCustomer() {
return new CustomerServiceImpl();
}
}
Bean的作用范围:
它是可以通过配置的方式来调整作用范围。
配置的属性:bean标签的scope属性。
属性的取值:
singleton:单例的(默认值)
prototype:多例的(当我们让spring接管struts2的action创建时,action必须配置此值)
request:作用范围是一次请求,和当前请求的转发。
session:作用范围是一次会话。
globalsession :作用范围是一次全局会话。
Bean的生命周期:
涉及bean标签的两个属性:
init-method
destroy-method
单例:
出生:容器创建,对象就出生了。
活着:只要容器在,对象就一直存在。
死亡:容器销毁,对象消亡。
多例:
出生:每次使用时,创建对象
活着:只要对象在使用中,就一直活着
死亡:当对象长时间不使用,并且也没有别的对象引用时,由java的垃圾回收器回收。