Ioc容器
什么是IoC
IoC就是控制反转,也被称为依赖注入(DI),是面向对象编程中的一种设计理念,用来减少程序代码之间的耦合度。
控制反转:例如我们现在有一个A类和一个B类,A类想调用B类中的方法就要先new B类对象(静态方法除外),这种情况,我们自己控制对象的创建。坏处是无法分开来开发,必须先开发出B类然后才可以开发A类。当然我们也可以先顶一个接口,然B类实现这个接口,这样也可以协作开发。但是这样的坏处是,我们现在不想使用B类,而是想使用BB这个类,我们就需要找源码,重新编译程序。而是用Spring的IoC容器,就可以帮助我们管理好我们写的类(组建),将创建类实例的控制权交给IoC容器,让容器帮助我们创建和管理,我们只需要从容器中取出对象就可以,这样当我们想更换模块的时候,我们只需要修改容器的配置文件就可以。
依赖注入:当容器帮我们创建对象的时候,会为这个对象注入属性值或其他对象实例。
注意:被IoC容器管理的java类都称为Bean。
此类当中有一个name属性和一个show()方法
配置Xml
这里是一个比较简单的例子,上面说过通过IoC容器管理的javaBean都称为Bean,所以这里用<bean></bean>标签,每一个标签代表一个类。id属性表示协作对象,用于获取容器给我们创建的对象,class属性定义了bean的类型。
使用<property />用来指定它的属性,name属性为类的属性名,value属性为初始值(可以不写),当Spring创建IoC容器的时候,会通过你的xml文件参数来做一些初始化工作。也可以通过ref属性来赋值对象。
实例化容器
ApplicationContext接口代表Spring IoC容器,负责实例化、配置和装配Bean。可以通过 ClassPathXmlApplicationContext 或FileSystemXmlApplicationContext创建实例。
getBean()方法,根据id值获取IoC容器中的对象,返回值类型为Object需要向下转型。 注意:ApplicationContext在初始化的时候就会实例化单例的Bean。
ClassPathXmlApplicationContext是ApplicationContext的实现类,从类路径下加载配置文件。
控制反转:就是将创建对象实例的权限交给 spring容器来处理,我们使用的时候直接通过容器的标示来获取对象
依赖注入:降低 各个组件的依赖关系,我们可以提供接口同时开发这些组件,到时候进行整合就可以。
开闭原则
开:开放扩展
必:不修改源代码
Bean的作用域
生命周期回调
我个人比较喜欢理解成,在创建对象或销毁时立即执行某个方法。
什么是IoC
IoC就是控制反转,也被称为依赖注入(DI),是面向对象编程中的一种设计理念,用来减少程序代码之间的耦合度。
控制反转:例如我们现在有一个A类和一个B类,A类想调用B类中的方法就要先new B类对象(静态方法除外),这种情况,我们自己控制对象的创建。坏处是无法分开来开发,必须先开发出B类然后才可以开发A类。当然我们也可以先顶一个接口,然B类实现这个接口,这样也可以协作开发。但是这样的坏处是,我们现在不想使用B类,而是想使用BB这个类,我们就需要找源码,重新编译程序。而是用Spring的IoC容器,就可以帮助我们管理好我们写的类(组建),将创建类实例的控制权交给IoC容器,让容器帮助我们创建和管理,我们只需要从容器中取出对象就可以,这样当我们想更换模块的时候,我们只需要修改容器的配置文件就可以。
依赖注入:当容器帮我们创建对象的时候,会为这个对象注入属性值或其他对象实例。
注意:被IoC容器管理的java类都称为Bean。
将javaBean放入IoC容器
创建类(Print.class)此类当中有一个name属性和一个show()方法
配置Xml
这里是一个比较简单的例子,上面说过通过IoC容器管理的javaBean都称为Bean,所以这里用<bean></bean>标签,每一个标签代表一个类。id属性表示协作对象,用于获取容器给我们创建的对象,class属性定义了bean的类型。
使用<property />用来指定它的属性,name属性为类的属性名,value属性为初始值(可以不写),当Spring创建IoC容器的时候,会通过你的xml文件参数来做一些初始化工作。也可以通过ref属性来赋值对象。
实例化容器
ApplicationContext接口代表Spring IoC容器,负责实例化、配置和装配Bean。可以通过 ClassPathXmlApplicationContext 或FileSystemXmlApplicationContext创建实例。
getBean()方法,根据id值获取IoC容器中的对象,返回值类型为Object需要向下转型。 注意:ApplicationContext在初始化的时候就会实例化单例的Bean。
ClassPathXmlApplicationContext是ApplicationContext的实现类,从类路径下加载配置文件。
Configuration metadata:Spring IoC容器 配置元数据 ; 这个配置元数据代表你如何为应用程序开发者告诉Spring容器来实例化,配置和应用程序中的装配对象。
控制反转:就是将创建对象实例的权限交给 spring容器来处理,我们使用的时候直接通过容器的标示来获取对象
依赖注入:降低 各个组件的依赖关系,我们可以提供接口同时开发这些组件,到时候进行整合就可以。
开闭原则
开:开放扩展
必:不修改源代码
Bean的作用域
singleton:(默认值)在Spring IoC容器中只创建一个对象实例,要使用bean的时候都会获取这一个
prototype:每次使用到此bean的时候都会创建一个新的实例
request:bean的生命周期只作用于HTTP请求
session:bean的生命周期只作用于Session
globalSession:bean的生命周期只作用于全局Session,并且仅适用于基于portlet的web应用程序
application:bean的生命周期只作用于全局ServletContext
websocket:作用域一个bean定义到的WebSocket的生命周期。只有在基于web的Spring ApplicationContext情形下有效。
使用方法:
<bean id="appPreferences" class="com.foo.AppPreferences" scope="application"/>将scope属性换成你想使用的作用域
生命周期回调
我个人比较喜欢理解成,在创建对象或销毁时立即执行某个方法。
<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init" />
<bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="cleanup"/>其中 init-method属性表明对象创建后执行的方法,destroy-method属性表明对象销毁时执行那个方法。当然方法名可以随意。