您的位置:首页 > 编程语言 > Java开发

依赖注入DI详解——媳妇儿写的

2016-05-05 22:35 381 查看

依赖注入是指,spring在创建对象A时(A依赖于B),自动将B注入的过程

如service依赖dao,spring将自动创建dao,并通过service提供的set方法进行设置(注入)。

is a 与has a的区别

is a –>是什么? –> 继承(父子类)

has a –> 有一个 –> 依赖

依赖注入原理

现在有BookService与BookDao,BookTest 三个类,BookService依赖于BookDao,BookTest用于测试。

public class BookService {
//传统写法,
// private bookDao book = new bookDao();
//新写法,利用setter注入
private BookDao bookDao;

public void addBook() {
bookDao.save();
}
//bookDao 的setter方法
public void setBook(BookDao book) {
this.bookDao = book;
}

}


public class BookDao {

public void save() {
System.out.println("save book");
}
}


public class BookTest {

@Test
public void testDemo1() {
BookDao bookDao = new BookDao();
BookService bookService = new BookService();
bookService.setBook(bookDao);

//在此处调用BookService中的addBoook()方法
//需要做如上的准备工作(创建bookDao,bookService对象,并创建两个对象之间的依赖关系)
bookService.addBook();
}
}


修改BookTest 中的代码,添加配置文件,实现依赖注入思想

在applicationContext.xml中添加如下代码

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 
<!--创建bookDao对象-->
<bean id="bookDao" class="com.xiaowang.b_di.BookDao"></bean>
<!--创建bookService对象-->
<bean id="bookService" class="com.xiaowang.b_di.BookService">
<!-- 该段代码 执行的就是依赖注入的过程,底层将执行setter方法
name 应填入对象的属性,该属性是根据bookService的setter方法推导出来的(而不是直接获取到的对象属性),
setBookDao -> bookDao (由setBookDao方法名,推出bookDao 属性名)
ref  应填入其对象的引用,
-->
<!-- 就是说给bookService对象的bookDao属性赋值,其值为bookDao对象-->
<property name="bookDao" ref="bookDao"></property>
</bean>
</beans>


注意 :
<bean id="bookDao" class="com.xiaowang.b_di.BookDao"></bean>
相当于 BookDao bookDao=newBookDao();
<property name="bookDao" ref="bookDao"></property>
相当于 bookService.setBookDao("bookDao");


做好如上配置,我们就可以修改BookTest的代码了。

public class BookTest {

@Test
public void testDemo2() {
// 从spring容器中获取内容

// 1 获得容器
String xmlPath = "com/xiaowang/b_di/applicationContext.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);

// 获得对象
BookService bookService = applicationContext.getBean("bookService", BookService.class);

bookService.addBook();
}
}


这样就能清晰明了的看到依赖注入的实现原理了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring java