1. id 和 name
<bean name="p" id="p" class="xxxxx"> </bean>
name : 可重复的,可以有特殊字符的
id: 不可重复的,不可有特殊字符的
2. 工厂的类型
ClassPathXmlApplicationContext
参数为文件名,处理的时候是有添加默认的类路径的,类路径即classPath,一般是定位到项目的bin文件和引用的包,可以使用java.class.path
查看
//下面的参数等价于classPath:application.xml
ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
FileSystemXmlApplicationContext
参数为包含文件路径的文件名,处理的时候有添加默认的文件路径,一般是定位到项目文件夹,可以输出System.getProperty("user.dir")
进行查看
//下面的参数等价于File:src\\applicatioin.xml
ApplicationContext context = new FileSystemXmlApplicationContext("src\\applicatioin.xml");
3. 单例和多例
单例模式
配置文件中scope的属性值默认为"singleton",产生的类对象都是单例模式的
<!--下述两种配置相等-->
<bean name="p" class="com.woder.spring.pojo.Person" scope="singleton"></bean>
<bean name="p" class="com.woder.spring.pojo.Person" ></bean>
public class IOCTest {
@Test
public void testScpe() {
//创建容器
ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
//创建对象
Person p1 = (Person)context.getBean("p");
Person p2 = (Person)context.getBean("p");
// true
System.out.println(p1==p2);
}
}
容器启动时创建对象,设置lazy-init="true"后,变成创建对象时才创建。
多例模式
scope="prototype" 变成多例模式,容器启动时不创建对象,创建对象的时候才创建对象
<bean name="p" class="com.woder.spring.pojo.Person" scope="prototype" ></bean>
public class IOCTest {
@Test
public void testScpe() {
//创建容器
ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
//生产对象
Person p1 = (Person)context.getBean("p");
Person p2 = (Person)context.getBean("p");
// false
System.out.println(p1==p2);
}
}
5. 对象的初始化和销毁方法
<bean name="p" class="com.woder.spring.pojo.Person" init-method="init" destroy-method="destroy()" ></bean>
通过设置init-method和destroy-method可以设置初始化方法和销毁方法
初始化方法早生成对象的时候会调用
而销毁的方法需要通过两种方式调用
//使用抽象容器调用destroy()
AbstractApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
//主动调用destroy方法执行销毁
context.destroy();
//或者调用close方法触发
context.close();