Spring的IOC配置
什么是IOC?
- IOC(Inversion Of Control)控制翻转,Spring反向控制应用程序所需要使用的外部资源
Bean
-
名称:bean
-
类型:标签
-
归属:beans标签
-
作用:定义spring中的资源,受此标签定义的资源将受到spring控制(就是把被定义的资源放入容器中)
-
格式:
-
<beans <bean> ... </bean> </beans>
-
-
基本属性:
-
<!--bean的name可以定义多个--> <bean id="beanId" name="beanName1,beanName2" class="ClassName"></bean>
- id:bean的名称,通过id值获取bean
- class:bean的类型
- name:bean的名称,可以通过name值获取bean,用于多人配合时给bean取别名
-
bean属性scope
-
名称:scope
-
类型:属性
-
归属:bean标签
-
作用:定义bean的作用范围
-
格式:
-
<!--scope用于控制创建的对象是否是单例,默认为单例--> <bean scope="singleton"></bean> <bean scope="prototype"></bean>
-
-
取值:
- singleton:创建的对象是单例的,也就是说创建的对象是同一个对象
- prototype:创建的对象是非单例的,创建的对象都是不同的对象
-
创建时机
- singleton:加载spring容器时创建
- prototype:获取对象时(getBean)创建,获取一次就创建一次
-
模式区别:
-
singleton:饿汉模式(不管你用不用,加载的时候就先给你)
-
prototype:懒汉模式(你要的时候我才给你)
-
Bean的生命周期控制
-
名称:init-method,destroy-method
-
类型:属性
-
归属:bean标签
-
作用:定义bean对象在初始化或销毁时完成的工作
-
格式:
-
<bean init-method="init" destroy-method="destroy"></bean>
-
-
取值:bean对应的类中对应的具体方法名
-
当spring配置的是非单例的时候,就不归spring管理,spring只负责创建对象,关闭容器跟spring没有关联
依赖注入
-
IOC(Inversion Of Control)控制翻转,Spring反向控制应用程序所需要使用的外部资源
-
DI(Dependency Injection)依赖注入,应用程序运行依赖的资源由Spring提供,资源进入应用程序的方式称为注入
-
IOC与DI的关系
- IOC与DI是同一件事站在不同的角度看待问题
依赖注入的方式
- set注入
- 构造器注入
set注入(主流)
-
名称:property
-
类型:标签
-
归属:bean标签
-
作用:使用set方法的形式为bean提供资源
-
格式:
-
<bean> <property /> </bean>
-
-
基本属性:
-
<property name="propertyName" value="propertyValue" ref="beanId" />
- name:对应bean中的属性名,要求该属性必须提供可访问的set方法(严格规范为此名称是set方法对应名称)
- value:设定非引用类型属性对应的值,不能与ref同时使用
- ref:设定引用类型属性对应bean的id,不能与value同时使用
-
构造器注入(了解)
-
名称:constructor-arg
-
类型:标签
-
归属:bean标签
- 作用:使用构造方法的形式为bean提供资源,兼容早期遗留系统的升级工作
-
格式:
-
<bean> <constructor-arg /> </bean>
-
-
基本属性:
-
<constructor-arg name="argsName" value="argsValue" />
- name:对应bean中的构造方法所携带的参数名
- value:设定非引用类型构造方法参数对应的值,不能与ref同时使用
-
集合类型数据注入
-
名称:array,list,set,map,props
-
类型:标签
-
归属:property标签或者constructor-arg标签
-
作用:注入集合数据类型属性
-
格式:
-
<property> <list></list> </property>
-
-
<bean id="userService" class="com.spring.service.impl.UserServiceImpl"> <property name="userDao" ref="userDao"/> <property name="bookDao" ref="bookDao"/> </bean> <bean id="bookDao" class="com.spring.dao.impl.BookDaoImpl"> <property name="al"> <list> <value>list</value> <value>list</value> </list> </property> <property name="properties"> <props> <prop key="name">prop</prop> <prop key="value">prop</prop> </props> </property> <property name="arr"> <array> <value>array</value> <value>array</value> </array> </property> <property name="hs"> <set> <value>set</value> <value>set</value> </set> </property> <property name="hm"> <map> <entry key="name" value="map"/> <entry key="value" value="map"/> </map> </property> </bean>
P命名空间的引入和使用
-
名称:p:propertyName,p:propertyName-ref
-
类型:属性
-
归属:bean标签
-
作用:为bean注入属性值(相当于简写格式)
-
格式:
-
<bean p:propertyName="p:propertyValue" p:propertyName-ref="beanId"/>
-
-
注意事项:使用p命名需要得到spring对p命名空间的支持,在bean标签中添加对应空间支持
-
<beans xmlns:p="http://www.springframework.org/schema/p"> </beans>
-
-
案例:
-
<bean id="userService" class="com.spring.service.impl.UserServiceImpl" p:userDao-ref="userDao" p:bookDao-ref="bookDao" />
-
SpEL(了解)
-
Spring提供了对EL表达式的支持,统一属性注入格式
-
类型:属性值
-
归属:value属性值
-
作用:为bean注入属性值,可以把ref统一更改为value(引用类型和非引用类型都统一使用value)
-
格式:
-
<bean> <property value="EL"></property> </bean>
-
-
案例:
-
<bean id="userService" class="com.spring.service.impl.UserServiceImpl"> <property name="userDao" value="#{userDao}"/> <property name="bookDao" value="#{bookDao}"/> <property name="num" value="#{6666}"/> <property name="version" value="#{'EL'}"/> </bean>
-
读取propertys文件信息
-
Spring提供了读取外部propertys文件的机制,使用读取到的数据为bean的属性赋值
-
操作步骤:
-
1.准备外部propertys文件
-
2.开启context命名空间
-
<beans xmlns:context="http://www.springframework.org/schema/context"> </beans>
-
-
3.加载指定的propertys文件
-
<context:property-placeholder location="classpath:filename.properties"/>
-
-
4.使用加载的数据
-
<property name="userName" value="${username}"/>
-
-
-
注意:如果需要加载所有的propertys文件,可以使用*.propertys表示加载所有的propertys文件
-
<context:property-placeholder location="classpath:*.properties"/>
-
-
注意:读取数据使用${propertiesName}格式进行
import导入配置文件(团队开发)
-
名称:import
-
类型:标签
-
归属:bean标签
-
作用:在当前配置文件中导入其它配置文件的项(就是把项目不同的模块进行拆分)
-
格式:
-
<beans> <import /> </beans>
-
-
基本属性:
-
<import resources="config.xml" />
- resources:加载的配置文件名
-
第三方资源配置
-
案例:导入阿里数据源Druid
-
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean>
-