Spring学习之DI(一)
来源:互联网 发布:济南搜索引擎优化外包 编辑:程序博客网 时间:2024/05/17 01:05
DI也就是依赖注入。几乎任何的功能我们都需要至少两个类以及更多的类相互合作才能完成,这样就会必然会造成一个类依赖另外一个类的现象(也就是耦合),如果耦合程度太高的话会让我们应用的后期维护变得非常困难。DI就是为了解决这个问题,下面举例来说明。
上面的代码中我省略了Person类。上面的代码有一个问题,PersonDaoBean与PersonServiceBean紧紧地绑在了一起,有一个PersonServiceBean就一定存在一个PersonDaoBean,这样的话PersonServiceBean同PersonDaoBean就紧密的耦合在一起了。我们可以使用接口来解决这个高度耦合问题。于是我们可以写出下面的
代码来实现这个功能。
将类的实现隐藏在接口后面,但是PersonServiceBean只能使用一种特定的方式来添加用户(这里是PersonDaoBean)。这个时候我们应该想,是应该让PersonServiceBean自己负责获取保存用户的方式还是应该给予PersonServiceBean保存用户的方式?为了解决这个问题,我们可以像下面这么修改。
注:让PersonServiceBean被动获得保存用户的的方式还有另外一种方式,那就是工厂模式。可以像下面这样实现
现在我们需要实现一个添加用户的功能,我们几乎可以很快的写出下面的代码。
public class PersonDaoBean { public void add(){ System.out.println("添加一个人进来"); //添加一个用户 }}public class PersonServiceBean { private PersonDaoBean personDao; public PersonServiceBean { personDao = new PersonDaoBean(); } public void save(Person person){ personDao.save(person); }}
上面的代码中我省略了Person类。上面的代码有一个问题,PersonDaoBean与PersonServiceBean紧紧地绑在了一起,有一个PersonServiceBean就一定存在一个PersonDaoBean,这样的话PersonServiceBean同PersonDaoBean就紧密的耦合在一起了。我们可以使用接口来解决这个高度耦合问题。于是我们可以写出下面的
代码来实现这个功能。
public interface PersonDao { public abstract void add();}public class PersonDaoBean implements PersonDao{ public void add(){ System.out.println("添加一个人进来"); //添加一个用户 }}public class PersonServiceBean { private PersonDao personDao; public PersonServiceBean { personDao = new PersonDaoBean(); } public void save(Person person){ personDao.save(person); }}
将类的实现隐藏在接口后面,但是PersonServiceBean只能使用一种特定的方式来添加用户(这里是PersonDaoBean)。这个时候我们应该想,是应该让PersonServiceBean自己负责获取保存用户的方式还是应该给予PersonServiceBean保存用户的方式?为了解决这个问题,我们可以像下面这么修改。
public interface PersonDao { public abstract void add();}public class PersonDaoBean implements PersonDao{ public void add(){ System.out.println("添加一个人进来"); //添加一个用户 }}public class PersonServiceBean { private PersonDao personDao; public PersonServiceBean { personDao = new PersonDaoBean(); } public void save(Person person){ personDao.save(person); } public void setPersonDao(PersonDao personDao) { this.personDao = personDao; }}现在PersonServiceBean是被动得到保存用户的方式的,你可以按自己需要的保存用户的方式给PersonServiceBean任何一种PersonDao的实现。这就是DI,这就是Spring所起的一个核心作用。
注:让PersonServiceBean被动获得保存用户的的方式还有另外一种方式,那就是工厂模式。可以像下面这样实现
public class PersonServiceBean { private PersonDao personDao; public PersonServiceBean { personDao = DaoFactory.getDao("personDao"); } public void save(Person person){ personDao.save(person); }}其中DaoFactory是一个工厂,"personDao"是一个properties文件中的一个键值对的键,我们如果要换一种保存用户的方式,只需要改变“personDao”对应的值(也就是接口personDao实现类的全名)就可以了。
0 0
- Spring学习之DI(一)
- Spring学习笔记(一)----IoC之DI
- Spring学习笔记(一)----IoC之DI
- Spring学习之DI(二)
- Spring之IOC/DI(一)
- spring初学一(DI)
- Spring学习(一)---依赖注入(DI)1
- spring学习系列(一) 依赖注入(DI)
- 【Java学习】spring入门之依赖注入(DI)
- Spring学习笔记之基础、IOC、DI(1)
- Spring学习之旅(一) 依赖注入(DI)与Spring Bean的装配
- spring框架学习之路(一)-入门基础(1)-IOC(控制反转)&DI(依赖注入)
- Spring 学习之 DI 依赖注入
- spring学习之IOC和DI
- Spring学习之IOC与DI
- Spring回顾(一)IoC & DI
- Spring In Action(一)DI、AOP
- Spring DI(一)
- 华为C语言编程规范(5)—可读性
- hdu 1686
- [linux] kernel modules make study.
- html中table设置每个单元格的不同颜色和宽度
- 010.JSP与Servlet交互深入详解
- Spring学习之DI(一)
- 循环程序设计
- 走进设计模式之——序言
- 华为C语言编程规范(6)—变量、结构
- 约瑟夫环问题两解
- POJ-Rebuilding Roads 树形DP
- form表单中input标签的11个高级用法
- QT生成DLL,调用DLL
- STL中的常用的vector,map,set,Sort用法