前言
Spring IOC容器有两种,即BeanFactory容器和ApplicationContext容器。
正文
BeanFactory容器
简单的容器,主要功能就是为依赖注入(DI)提供支持。
实现
基于XmlBeanFactory。
1.定义Bean
package com.silence.ioc.bf;
public class BeanFactoryTest {
public void getMessage() {
System.out.println("Hello Bean Factory!");
}
}
2.定义配置
命名为spring-context.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 http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<bean id="bf" class="com.silence.ioc.bf.BeanFactoryTest"></bean>
</beans>
3.定义容器类
package com.silence.ioc.bf;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
public class BeanFactoryContainer {
public static void main(String[] args) throws Exception {
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-context.xml"));
BeanFactoryTest beanFactoryTest = (BeanFactoryTest) beanFactory.getBean("bf");
beanFactoryTest.getMessage();
}
}
这是一个简单的实现,即定义一个名为BeanFactoryTest的Bean,由BeanFactory容器进行管理。
ApplicationContext容器
高级的容器,包含了BeanFactory的所有功能,并增加了企业级的实现。
实现
常用的三中实现:
- FileSystemXmlApplicationContext,需要提供文件的完整路径;
- ClassPathXmlApplicationContext,容器会从CLASSPATH中搜索配置;
- XmlWebApplicationContext,无需指定路径,默认读取/WEB-INF/*.xml文件;
1.定义Bean
package com.silence.ioc.ac;
public class ApplicationContextTest {
public void getMessage() {
System.out.println("Hello Application Context!");
}
}
2.定义配置
命名为spring-context.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 http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<bean id="bf" class="com.silence.ioc.bf.BeanFactoryTest"></bean>
<bean id="ac" class="com.silence.ioc.ac.ApplicationContextTest"></bean>
</beans>
3.定义容器类
package com.silence.ioc.ac;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ApplicationContextContainer {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-context.xml");
ApplicationContextTest applicationContextTest = (ApplicationContextTest) applicationContext.getBean("ac");
applicationContextTest.getMessage();
}
}