Spring核心容器之DI详解
一、依赖注入的介绍
依赖注入(Dependency Injection):它是 Spring 框架核心 IOC 的具体实现。在编写程序时,通过控制反转,把对象的创建交给了 Spring,但是代码中不可能出现没有依赖的情况。IOC 解耦只是降低他们的依赖关系,但不会消除。例如:业务层仍会调用持久层的方法。那这种业务层和持久层的依赖关系,在使用 Spring 之后,就让 Spring 来维护了。简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取。注意: DI 依赖IOC环境的
二、Spring中依赖注入方式
2.1、setter注入——引用类型
在bean中定义引用类型属性并提供可访问的set
方法
配置中使用property
标签ref
属性注入引用类型对象
2.2、setter注入——简单类型
在bean中定义基本类型属性并提供可访问的set
方法
配置中使用property
标签value
属性注入简单类型数据
2.3、构造器注入——引用类型
在bean中定义引用类型属性并提供可访问的构造
方法
配置中使用constructor-arg
标签ref
属性注入引用类型数据
2.4、构造器注入——简单类型
在bean中定义基本类型属性并提供可访问的set
方法
配置中使用constructor-arg
标签value
属性注入简单类型数据
2.5、构造器注入——参数适配
配置中使用constructor-arg
标签type
属性设置按形参类型注入
配置中使用constructor-arg
标签index
属性设置按形参位置注入
三、依赖自动装配
配置中使用bean
标签autowire
属性设置自动装配的类型
依赖自动装配特征
四、注入集合数据
我们这里介绍注入数组,List,Set,Map,Properties。具体代码如下:
package com.etime.entity;import java.util.*;public class Test {private String[] myStrs;private List<String> myList;private Set<String> mySet;private Map<String,String> myMap;private Properties myProps;public Teacher() {}public String[] getMyStrs() {return myStrs;}public void setMyStrs(String[] myStrs) {this.myStrs = myStrs;}public List<String> getMyList() {return myList;}public void setMyList(List<String> myList) {this.myList = myList;}public Set<String> getMySet() {return mySet;}public void setMySet(Set<String> mySet) {this.mySet = mySet;}public Map<String, String> getMyMap() {return myMap;}public void setMyMap(Map<String, String> myMap) {this.myMap = myMap;}public Properties getMyProps() {return myProps;}public void setMyProps(Properties myProps) {this.myProps = myProps;}@Overridepublic String toString() {return "Teacher{" +"myStrs=" + Arrays.toString(myStrs) +", myList=" + myList +", mySet=" + mySet +", myMap=" + myMap +", myProps=" + myProps +'}';}
}
在Spring.xml文件中配置Test类(利用setter注入依赖集合数据)
<bean id="test" class="com.etime.entity.Test"><property name="myStrs"><array><value>abc</value><value>efg</value><value>kfc</value></array></property><property name="myList"><list><value>123</value><value>234</value></list></property><property name="mySet"><set><value>987</value><value>hfd</value></set></property><property name="myMap"><map><entry key="a" value="aaaa"></entry><entry key="b" value="bbbb"></entry></map></property><property name="myProps"><props><prop key="c">cccc</prop><prop key="d">dddd</prop></props></property></bean>
集合注入测试方法
@Testpublic void t07(){ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");Test t = (Test) context.getBean("test");System.out.println(t);}
五、数据源对象管理
1、导入druid坐标
2、配置数据源对象作为spring管理的bean
六、加载properties文件
- 不加载系统属性
- 加载多个properties文件
- 加载所有properties文件
- 加载properties文件
标准格式
- 从类路径或jar包中搜索并加载properties文件