IoC思想
-
IoC
:Inversion of Control,控制反转。是指 把创建对象的控制权交给框架: 要想得到一个对象,由原来的主动创建对象,变成自己被动接收框架创建的对象。 -
IoC
是Spring的核心思想之一 -
作用:用于降低程序间的耦合性
Spring的核心-IoC
-
IoC:控制反转,反转的是创建对象的控制权。
-
原来:需要什么对象,就自己主动new什么对象
-
现在:需要什么对象,由Spring创建好给我们使用;我们直接接收即可
-
-
目的:解耦性,即依赖性
-
编译期依赖:编译过程中,必须提供依赖的类,否则编译报错
-
运行期依赖:编译时候不需要,但是程序运行中必须提供依赖的类,否则运行报错
-
解耦:尽量避免使用编译期依赖,使用运行期依赖
-
使用反射技术代替new,再把配置信息提取到配置文件里
-
-
-
技术:工厂模式
-
bean标签的配置:告诉Spring,要创建什么样的对象
<bean id="" class="" scope="" init-method="" destroy-method="" lazy-init=""></bean>
-
id:Spring创建好对象之后,用于获取这个对象的唯一标识
-
class:全限定类名,告诉Spring创建哪个类的实例对象
-
scope:bean对象的作用范围
-
singleton:单例的,默认值
-
何时创建:IoC容器初始化时/第一次使用bean对象时
-
何时销毁:当IoC容器关闭时销毁
-
单例bean和IoC容器同年同月同日死
-
-
prototype:多例的
-
何时创建:每次获取bean对象,都会创建新的
-
何时销毁:长时间不使用,JVM垃圾回收
-
IoC容器创建bean对象后就不管了,管生不管养
-
-
-
init-method:指定一个初始化方法,当Spring创建完这个对象之后,会立即执行这个方法
-
destroy-method:指定一个销毁方法,当bean对象被销毁时(前),会先执行这个方法
-
lazy-init:是否懒加载。只针对单例bean
-
如果是true:当第一次获取单例bean时,才会创建这个bean对象
-
如果是false:默认值,当IoC容器初始化时,就会创建单例bean对象
-
-
-
bean的实例化方式:告诉Spring,该如何创建对象
-
默认的无参构造
-
工厂的静态方法:
<bean id="" class="工厂类的全限定类名" factory-method="静态方法名"></bean>
-
工厂的非静态方法:
<bean id="xxxFactory" class="工厂类的全限定类名"></bean> <bean id="" factory-bean="xxxFactory" factory-method="非静态方法"></bean>
-
依赖注入:Spring帮我们创建一个对象时,这个对象有一些依赖的值,我们配置一下,让Spring帮我们注入这些依赖的值
-
set方法注入(属性注入)
-
要求:类里的依赖项要有set方法
-
配置:使用property标签,给属性注入值
<bean> <property name="属性名" value="简单值"/> <property name="属性名" ref="其它bean对象"/> </bean>
-
-
构造方法注入
-
要求:类里要有有参构造。每个构造参数就是一个依赖项
-
配置:使用constructor-arg标签,给构造参数注入值
<bean> <constructor-arg name="属性名" value="简单值"/> <constructor-arg name="属性名" ref="其它bean对象"/> </bean>
-
-
p名称空间(本质还是set方法注入)
-
要求:类里的依赖项要有set方法
-
配置:在xml里引入p名称空间,然后
<bean p:属性名="简单值" p:属性名-ref="其它bean对象"></bean>
-
-
注入复杂数据(集合数据)
-
给数组注入:用array标签
-
给List注入:用list标签
-
给Set注入:用set标签
-
给Map注入:用map标签
-
给Properties注入:用props标签
-
补充内容
-
引入properties文件:
<context:property-placeholder location="classpath:jdbc.properties"/>
-
引入模块的配置文件:
-
web层、service层、dao层各有一个配置文件
-
最终要加载所有的配置文件
-
把某一文件当成总的配置文件,使用
<import resource="classpath:模块配置文件"/>
。创建IoC容器时只加载总的配置文件即可 -
直接在创建IoC容器时,加载所有的配置文件
-
-