BeanFactory负责定义文件,管理对象的加载,生成,维持与对象的依赖关系,负责bean的生命周期
自己根据书上的解释,写了一些例子:
一:常用方法
1:boolean containsBean()
package testbean;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class BeanFactoryTest {
Resource rs = new ClassPathResource("beans-config.xml");
BeanFactory bean = new XmlBeanFactory(rs);
boolean isnull = bean.containsBean("hellobean");//containsBean()判断在beans-config.xml中是否包含名称为hellobean的bean.返回值类型为布尔
public static void main(String args[]){
boolean isnull = new BeanFactoryTest().isnull;
System.out.print(isnull);
}
}
2:Object getBean()
在第一个spring中的例子中,就能找到getBean()的使用.
package test;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
public class SpringDemo {
public static void main(String args[]){
Resource rs = new ClassPathResource("beans-config.xml");//获取xml路径
BeanFactory factory = new XmlBeanFactory(rs);//建立BeanFactory实例
HelloWorld hello = (HelloWorld) factory.getBean("hellobean");//使用getBean方法获得HelloWorld类的实例
// System.out.print(hello.getHellobean());
Business business = (Business) factory.getBean("business");//根据bean的id获取xml中指向的对象
business.sava();//执行Business中的save()方法
}
}
]
3:...未完待续
二:使用ApplicationContext取代BeanFactory管理bean
//推荐使用
优点:
1:提供更好的访问资源文件的方式
2:提供解析文字消息的方法
3:支持国际化消息
4:可以发布事件
package testbean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import test.HelloWorld;
public class Applicationtest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans-config.xml");
HelloWorld hello = (HelloWorld)context.getBean("hellobean");
System.out.print(hello.getHellobean());
}
}
注意:使用ApplicationContext可以实现同时读取多个资源文件(需要添加spring jar包中的spring-context.jar,使用myeclipse的话已自动添加)
(1):数组形式
ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"beans-config.xml","beans-config2.xml"});
(2):路径
可以使用file:/ classpath*: http:// 等URL
ApplicationContext context = new ClassPathXmlApplicationContext("classpath*:beans-config.xml");
表示所有的classpath为前置路径的都匹配
(3):使用*字符
ApplicationContext context = new ClassPathXmlApplicationContext("beans*.xml");
表示所有以beans开头的文件都匹配,需要注意的是只在实际文件系统中有效,如资源文件在jar文件中则无效.
另一种实现一次读多个资源文件的方式:
在一个xml文件中,引用其他xml文件,实现调用该xml文件,顺带调用其引用的xml文件
<beans>
<import resource="beans-config2.xml"/>
<import resource="beans-config3.xml"/>
<bean id="hellobean"
class="test.HelloWorld">
<property name="hellobean">
<value>hello!</value>
</property>
</bean>
</beans>
需要注意:使用此种方法,需要将import放在beans标签之间,且一定要放在bean标签之前