Spring Framework 版本:4.3.23
加载xml配置信息创建IOC容器:
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
注:创建IOC容器时可以指定多个xml配置文件
xml配置文件模板:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- services --> <bean id="petStore" class="org.springframework.samples.jpetstore.services.PetStoreServiceImpl"> <property name="accountDao" ref="accountDao"/> <property name="itemDao" ref="itemDao"/> <!-- additional collaborators and configuration for this bean go here --> </bean> <!-- more bean definitions for services go here --> </beans>"ref"标签维护了多个bean之间的依赖关系
当工程很大、配置文件内容很多的时候,可以讲配置信息放在多个xml里,基于这些xml来创建IOC容器有两种方法:
1、ClassPathXmlApplicationContext构造器中传递多个xml
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");2、在其中一个xml里使用import标签 指明包含其它的xml,如:
<beans> <import resource="services.xml"/> <import resource="resources/messageSource.xml"/> <import resource="/resources/themeSource.xml"/> <bean id="bean1" class="..."/> <bean id="bean2" class="..."/> </beans>注:import导入时,路径可以是相对路径、绝对路径
通过ApplicationContext 对象的getBean方法获取注册的bean对象,如:
// create and configure beans
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml"); // retrieve configured instance PetStoreService service = context.getBean("petStore", PetStoreService.class); // use configured instance List<String> userList = service.getUsernameList();
ioc容器管理的bean 是通过用户提供的配置信息创建的,bean的配置方法有:
1、xml里的<bean>标签
2、注解的方式,如@Bean、@Component、@Service、 @Controller
3、Groovy Bean Definition DSL
在ioc容器里bean的配置信息被封装为BeanDefinition对象。
BeanDefinition对象包含的信息分为以下几类:
1、类的全名称,如com.k6k4.XXX
2、bean的一些行为配置,如:scope, lifecycle
3、bean的依赖信息
4、其它的一些信息
具体包括:
class: 类全名 |
name:bean名称 |
scope :作用范围 |
constructor arguments: 构造器参数 |
properties :属性 |
autowiring mode :自动注入策略 |
lazy-initialization mode :延迟实例化策略 |
destruction method:销毁时调用的方法 |
除了通过提供bean的配置信息可以将bean注册到ioc容器中,还可以通过代码的方式注册: