> 文章列表 > Spring核心容器之DI详解

Spring核心容器之DI详解

Spring核心容器之DI详解

一、依赖注入的介绍

依赖注入(Dependency Injection):它是 Spring 框架核心 IOC 的具体实现。在编写程序时,通过控制反转,把对象的创建交给了 Spring,但是代码中不可能出现没有依赖的情况。IOC 解耦只是降低他们的依赖关系,但不会消除。例如:业务层仍会调用持久层的方法。那这种业务层和持久层的依赖关系,在使用 Spring 之后,就让 Spring 来维护了。简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取。注意: DI 依赖IOC环境的

二、Spring中依赖注入方式

2.1、setter注入——引用类型

在bean中定义引用类型属性并提供可访问的set方法
Spring核心容器之DI详解

配置中使用property标签ref属性注入引用类型对象
Spring核心容器之DI详解

2.2、setter注入——简单类型

在bean中定义基本类型属性并提供可访问的set方法
Spring核心容器之DI详解

配置中使用property标签value属性注入简单类型数据
Spring核心容器之DI详解

2.3、构造器注入——引用类型

在bean中定义引用类型属性并提供可访问的构造方法
Spring核心容器之DI详解

配置中使用constructor-arg标签ref属性注入引用类型数据
Spring核心容器之DI详解

2.4、构造器注入——简单类型

在bean中定义基本类型属性并提供可访问的set方法
Spring核心容器之DI详解

配置中使用constructor-arg标签value属性注入简单类型数据
Spring核心容器之DI详解

2.5、构造器注入——参数适配

配置中使用constructor-arg标签type属性设置按形参类型注入
Spring核心容器之DI详解

配置中使用constructor-arg标签index属性设置按形参位置注入
Spring核心容器之DI详解

三、依赖自动装配

配置中使用bean标签autowire属性设置自动装配的类型
Spring核心容器之DI详解
依赖自动装配特征

Spring核心容器之DI详解

四、注入集合数据

我们这里介绍注入数组,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坐标
Spring核心容器之DI详解

2、配置数据源对象作为spring管理的bean
Spring核心容器之DI详解

六、加载properties文件

  • 不加载系统属性
    Spring核心容器之DI详解
  • 加载多个properties文件
    Spring核心容器之DI详解
  • 加载所有properties文件
    Spring核心容器之DI详解
  • 加载properties文件标准格式
    Spring核心容器之DI详解
  • 从类路径或jar包中搜索并加载properties文件
    Spring核心容器之DI详解

七、总结

Spring核心容器之DI详解