文章目录
IOC容器讲解
IOC思想
Spring的核心思想之一:IOC(Inversion Of Control)控制反转。
什么是控制反转?
- 将对象的创建,配置及维护交给第三方管理,第三方这里指的是IOC容器
- 由容器来负责对象的创建等工作,谁需要使用对象,就可以在IOC容器中获取,这就是控制反转
对象与对象之间的依赖关系在Spring中如何处理?
- Spring中对象在创建之后,需要依赖其他对象时就需要依赖注入DI(Dependency Injection)
- 控制反转是将对象交给外部管理(容器),而依赖注入也可以交给容器进项管理
IOC核心点在于:对象不由使用方双方管理,而是交给不使用的第三方进行管理
好处:
- 资源集中管理,实现资源的可配置和易维护
- 降低了使用资源双方的依赖程度,即是我们说的降低耦合度
Spring容器管理对象
1、导入依赖
<!--Spring依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
2、Spring的配置文件
在resources目录下给定xml配置文件,命令为application.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-3.0.xsd">
</beans>
3、创建实例类(Person.java)
public class Person {
private String name;
private int id;
}
4、IOC容器管理对象
- 以前我们通过new Person的方法创建对象。如:
Person person = new Person();
- 现在使用IOC的容器。可以让IOC容器帮创建对象,在application.xml文件中添加User的对应信息
<bean id="person" class="com.tulun.bean.Person"/>
- 交给管理对象使用标签 class属性:指定的是管理对象的类的全路径 id:表示该类的名称,通过该名称可以拿到对象实例
5、通过容器来获取对象
public class App {
public static void main(String[] args) {
//获取IOC容器
ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
//在容器中获取需要的对象
Person1 person = (Person) context.getBean("person");
System.out.println(person);
}
}
6、执行结果
IOC容器介绍
Spring中的Core模块:IOC容器,解决对象创建和对象之间的依赖关系,Core模块主要是如何获取容器
以上就是ApplicationContext容器中的接口的继承关系,ApplicationContext是BeanFactory的子接口之一,即BeanFactory是Spring IOC容器定义的最底层的接口,ApplicationCentext是BeanFactory的高级实现之一,是对BeanFactory功能做了许多的扩展。
1、BeanFactory
通过上面继承关系可知,BeanFactory是最底层的IOC容器实现
//获取IOC容器
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("application1.xml"));
2、AplicationContext
是IOC容器的高级使用,对BeanFacory做了很多扩展,功能比较强大,在实际使用过程中IOC容器往往使用的就是ApplicationContext
主要使用的三种创建IOC的方式:
(1)ClassPathXmlApplicationContext
读取ClassPath中的资源
ClassPathXmlApplicationContext("application.xml");
(2)FileSystemXmlAplicationContext
读取指定路径下的资源
new FileSystemXmlApplicationContext("/user");
(3)XmlWebAplicationContext
XmlWebApplicationContext wa = new XmlWebApplicationContext()//并没有初始化容器
wa.setServletContext(sevletcontext);//需要指定servletContext对象
wa.setConfigLocation("/applicationContext.xml");//指定配置文件的路径,开头是以web为根目录的路径
wa.refresh();//初始化容器
3、BeanFactory和ApplicationContext的区别
ApplicationContext在构建核心容器时,创建对象采取的是立即加载的方式。也就是说,只要一读取完配置文件马上就创建配置文件中配置的对象。
BeanFactory在构建核心容器时,创建对象采取的策略是采用延迟加载的方式。也就是说,什么时候根据id获取对象了,什么时候才真正的创建对象。
IOC容器原理浅析
- 利用dom4j技术,解析XML配置文件,获取里面所有的信息。
- 根据class属性的值,利用反射创建对象。
- 将利用反射创建出的对象放入到map中,key就是它所对应的id值。