Spring有两个核心接口 BeanFactory和ApplicationContext,
其中ApplicationContext是BeanFactory的子接口。
ApplicationContext是Spring容器最常用的接口,该接口有两个实现类
//从类的加载路径下搜索配置文件,并根据配置文件来创建Spring容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml","bean1.xml");
Persion p = ctx.getBean("persion",Persion.class);
//使用
ClassPathXmlApplication
同时加载多个xml文件
ApplicationContext application = new ClassPathXmlApplication("bean.xml","service.xml");
Persion p = ctx.getBean("chinese" , Persion.class);
//从文件系统的相对路径或绝对路径下去搜索配置文件
FileSystemXmlApplicationContext
ApplicationContext默认会初始化所有的singletonBean可以通过配置文件取消预初始化
可以通过<bean/>元素指定lazy-init = "true"阻止容器预初始化该Bean
—————————————————————————————————————————
Spring的国际化支持
ApplicationContext继承MessageSource接口,因而提供国际化支持
ApplicationContext接口继承了MessageSource接口,因此具有国际化功能,当程序创建ApplicationContext容器
时,Spring自动查找配置文件中名为messageSouce的Bean实例
—————————————————————————————————————————
容器Bean的
作用域 scope=""
singleton
prototype
request
session
global session
抽象bean abstract="true"
子Bean无法从父Bean中继承如下属性
depends-on autowire singleton scope lazy-init 这些属性需子Bean定义或采用默认值
parent="父Bean"
—————————————————————————————————————————
容器中Bean的声明周期
Spring可以管理singleton作用域的Bean的声明周期,Spring可以精确的知道该Bean合适被创建,何时被初始化完成,容器何时销毁该Bean。
Spring提供两种方式在Bean属性全部设置成功后执行特定行为
1.使用init-method="
init
"
public void init(){}
2.实现InitializingBean接口
public void afterPropertiesSet(){}
3.<beans default-init-method="init"></beans>
流程
实例化依赖Bean
实例化自身Bean
执行
afterPropertiesSet
执行init指定的方法
指定销毁Bean之前指定执行方法
1.destroy-method=""
2.实现DisposableBean接口
实现void destroy() throws Exception{}
7 bean的初期化和销毁
配置文件
<bean id="car" class="com.hzlssd.factory.Car" init-method="init"
destroy-method="destroy">
<property name="brand" value="15"></property>
</bean>
实体类声明
public class Car{
private String brand;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
System.out.println("赋值方法调用");
this.brand = brand;
}
public Car(){
System.out.println("无参构造器");
}
public void init(){
System.out.println("init方法调用");
}
public void destroy(){
System.out.println("销毁对象");
}
}
调用方法
public class Main {
public static void main(String[] args) {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("bean-Factory.xml");
Car car1 = (Car) ctx.getBean("car");
System.out.println(car1);
ctx.destroy();
}
}
输出:无参构造器 赋值方法调用 init方法调用 com.hzlssd.factory.Car@2ead5b0c