依赖注入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(); } }
这样就能清晰明了的看到依赖注入的实现原理了
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树