Spring框架的核心是容器,容易用来管理所有Bean的创建,使用,销毁等工作,Spring容器使用DI来管理组件,DI本质上是通过反射来实现的。Spring提供了多种容器,分为两类 Bean工厂和应用上下文。
Bean工厂是最简单的Spring容器,最常用的的BeanFactory实现是XmlBeanFactory,根据XML文件装载Bean。要创建XmlBeanFactory必须传递Resource实例给构造函数。如 BeanFactory factory = new XmlBeanFactory(new FileSystemResource("c:/factory.xml"));
应用上下文是更加高级的容器,应用比BeanFactory广泛。有几种经常用到:ClassPathXmlApplicationContext,FileSystemXmlApplicationContext,XmlWebApplicationContext.如ApplicationContext context=new ClassPathXmlApplicationContext("factory.xml");
Bean工厂延迟载入Bean,只有getBean()方法调用Bean才被创建,而应用上下文则预先载入所有的Bean,要使用的时候已经准备好了。
一个简单的Bean的配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "spring-beans-2.0.dtd">
<beans default-autowire="no">
<bean id="greetingService" class="spingTest.GreetService" init-method="init" destroy-method="destroy" autowire="constructor">
<property name="greeting"> <value>greeting</value> </property>
<property name="myRef"><ref bean="refName"/> </property>
<property name="aList">
<list>
<ref bean="refName"/>
<ref bean="greeting"/>
</list>
</property>
<property name="aMap">
<map>
<entry key="aaa" value="bbbb"></entry>
<entry key-ref="greetingService" value-ref="refName"/>
</map>
</property>
<property name="aProps">
<props>
<prop key="props">PROPS</prop>
</props>
</property>
<constructor-arg index="1">
<value>11</value>
</constructor-arg>
<constructor-arg index="0">
<value>add</value>
</constructor-arg>
</bean>
<bean id="refName" class="spingTest.RefMy">
</bean>
</beans>
如上:<bean/>元素是Spring中最基本的单元,id就是bean的名字,是向容器申请的名字,class就是你类的路径了。可以通过构造方法注入(constructor-arg,如果有多个构造参数,且类型一样,为防止配置交叉的错误,可以通过index指定是第几个参数,value就是这个构造函数参数的值,ref就是引用另一个bean),也可以通过属性注入(property,就相当于通过setXXX方法设置属性),至于你使用哪种方法注入,没有硬性规定,根据实际情况决定,也可以混合使用。当然也可以装配集合,list,map,set,props,均可以装配ben和普通值,除了props(名称-值的集合,必须都是String)。map中key,value代表键,值都为String;key-ref,value-ref代表键值都为bean引用。