[b]一、简介[/b]
org.springframework.beans及org.springframework.context包 是Spring IoC容器
的基础。BeanFacotry提供的高级配置机制,使得管理各种对象成为可能,ApplicationContext是BeanFactory的扩展,因而BeanFactory所具备的能力和行为也适用于ApplicationContext,并且功能得到了进一步增强,比如更易 与Spring AOP集成、资源处理(国际化处理)、事件传递及各种不同应用层的context实现。
总之,BeanFactory提供了配制框架及基本功能,而 ApplicationContext 则增加了更多支持企业核心内容的功能。
[b]二、 容器和bean[/b]
在Spring中,那些组成你应用程序的主体及由Spring IoC容器所管理的对象,被称之为bean。 简单地讲,bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象(pojo)没有什么区别了。
[b]
1、容器[/b]
BeanFactory 是Spring IoC容器的实际代表者,IoC容器负责容纳所描述的bean,并对bean进行管理。
在Spring中,BeanFactory是IoC容器的核心接口。 它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。
[b]1.1、实例化bean[/b]
bean定义描述如何创建一个或多个对象实例。容器从bean定义列表中取得一个指定的bean定义,并根据bean定义里面的配置元数据,使用反射机制来创建实际对象。bean的实例化的定义方式如下:
[b]1.2、实例化容器[/b]
spring团队倾向于把xml配置文件拆成多个部分的做法。通过将xml配置文件的路径作为参数传给ApplicationContext构造器,生成一个ApplicationContext实例,即实例了BeanFactory,BeanFacotry从多个配置文件读取bean定义。
ApplicationContext加载xml文件写法可以这样:
其他加截xml配置文件实例化IOC容器的方法有:
三、使用容器
获得BeanFactory容器后,接着使用getBean(String)就可以取得bean实例。
四、简单的例子(基于IOC的bean注入,将bean注入到执行类Test里)
首先创建一个对象HelloWorld(bean)
然后修改spring配置文件applicationContext.xml,在配置文件中实例化bean
再创建一个将要把bean注入进的类Test
通过Bean上下文工具获取Bean对象并注入给Test,然后输出其中的属性.
org.springframework.beans及org.springframework.context包 是Spring IoC容器
的基础。BeanFacotry提供的高级配置机制,使得管理各种对象成为可能,ApplicationContext是BeanFactory的扩展,因而BeanFactory所具备的能力和行为也适用于ApplicationContext,并且功能得到了进一步增强,比如更易 与Spring AOP集成、资源处理(国际化处理)、事件传递及各种不同应用层的context实现。
总之,BeanFactory提供了配制框架及基本功能,而 ApplicationContext 则增加了更多支持企业核心内容的功能。
[b]二、 容器和bean[/b]
在Spring中,那些组成你应用程序的主体及由Spring IoC容器所管理的对象,被称之为bean。 简单地讲,bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象(pojo)没有什么区别了。
[b]
1、容器[/b]
BeanFactory 是Spring IoC容器的实际代表者,IoC容器负责容纳所描述的bean,并对bean进行管理。
在Spring中,BeanFactory是IoC容器的核心接口。 它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。
[b]1.1、实例化bean[/b]
bean定义描述如何创建一个或多个对象实例。容器从bean定义列表中取得一个指定的bean定义,并根据bean定义里面的配置元数据,使用反射机制来创建实际对象。bean的实例化的定义方式如下:
//用构造器来实例化
<bean id="exampleBean" class="examples.ExampleBean"/>
//使用静态工厂方法实例化
<bean id="exampleBean"
class="examples.ExampleBean2"
factory-method="createInstance"/>
//使用实例工厂方法实例化
<bean id="serviceLocator" class="com.foo.DefaultServiceLocator">
</bean>
<!-- the bean to be created via the factory bean -->
<bean id="exampleBean"
factory-bean="serviceLocator"
factory-method="createInstance"/>
[b]1.2、实例化容器[/b]
spring团队倾向于把xml配置文件拆成多个部分的做法。通过将xml配置文件的路径作为参数传给ApplicationContext构造器,生成一个ApplicationContext实例,即实例了BeanFactory,BeanFacotry从多个配置文件读取bean定义。
ApplicationContext加载xml文件写法可以这样:
//1 第一种方法,使用数组
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] {"services.xml", "daos.xml"});
//2 使用通配符
ApplicationContext contex=new ClassPathXmlApplicationContext("s*.xml");
//3 使用组合的方式
ApplicationContext contex=new ClassPathXmlApplicationContext("services.xml");
在services.xml中
<import resource="daos.xml"/> 执行resource路径为相对daos.xml的路径
其他加截xml配置文件实例化IOC容器的方法有:
//applicationContext.xml放在工程目录下,也可以写成绝对路径
Resource resource = new FileSystemResource("applicationContext.xml");
BeanFactory factory = new XmlBeanFactory(resource);
//位于src目录下
ClassPathResource resource = new ClassPathResource("applicationContext.xml");
BeanFactory factory = new XmlBeanFactory(resource);
ApplicationContext context = new FileSystemXmlApplicationContext("applicationContext.xml");
//位于src目录下
ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml", "applicationContext2.xml"});
BeanFactory factory = (BeanFactory) context;
三、使用容器
BeanFactory factory = context;
获得BeanFactory容器后,接着使用getBean(String)就可以取得bean实例。
四、简单的例子(基于IOC的bean注入,将bean注入到执行类Test里)
首先创建一个对象HelloWorld(bean)
public class HelloWorld {
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
然后修改spring配置文件applicationContext.xml,在配置文件中实例化bean
<bean id="helloBean" class="com.spring.demo.HelloWorld">
<property name="msg" value="Hello World!"/>
</bean>
再创建一个将要把bean注入进的类Test
public static void main(String[] args){
//读取配置文件,获得BeanFactory
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
BeanFactory factory = context;
HelloWorld hello = (HelloWorld)factory.getBean("helloBean");
System.out.println(hello.getMsg());
}
通过Bean上下文工具获取Bean对象并注入给Test,然后输出其中的属性.