Spring-IoC(Inversion of Control )控制反转

叁歲伎倆 2023-01-21 14:19 72阅读 0赞

Inverse Of Controll:控制反转

反转了依赖关系的满足方式,由之前的自己创建依赖对象,变为由工厂推送。(变主动为被动,即反转)简单一点就是静止套娃

解决了具有依赖关系的组件之间的强耦合,使得项目形态更加稳健

项目中强耦合问题

  1. public class UserDAOImpl implements UserDAO{....}
  2. public class UserServiceImpl implements UserService {
  3. // !!!强耦合了UserDAOImpl!!!,使得UserServiceImpl变得不稳健!!
  4. private UserDAO userDAO= new UserDAOImpl();
  5. @Override
  6. public User queryUser() {
  7. return userDAO.queryUser();
  8. }
  9. ....
  10. }

解决方案

  1. <bean id="userDAO" class="com.qf.spring.part1.injection.UserDaoImpl"></bean>
  2. <!-- UserServiceImpl组件 -->
  3. <bean id="userService" class="com.qf.spring.part1.injection.UserServiceImpl">
  4. <!-- 由spring为userDAO属性赋值,值为id="userDAO"的bean -->
  5. <property name="userDAO" ref="userDAO"/>
  6. </bean>

此时,如果需要更换其他UserDAO实现类,则UserServiceImpl不用任何改动!则此时的UserServiceImpl组件变得更加稳健!

实例:

实现类

  1. public class EmpDaoImpl implements EmpDao {
  2. public void show() {
  3. System.out.println("这个是EmpDao");
  4. }
  5. }
  6. public class EmpServiceImpl implements EmpService {
  7. private EmpDao empDao;
  8. public void showAll() {
  9. empDao.show();
  10. System.out.println("这个是Services");
  11. }
  12. public EmpDao getEmpDao() {
  13. return empDao;
  14. }
  15. public void setEmpDao(EmpDao empDao) {
  16. this.empDao = empDao;
  17. }
  18. }

application-config.xml配置文件

  1. <!-- 配置实例(id:“唯一标识” class="需要被创建的目标对象全限定名") -->
  2. <bean id="empDao" class="com.cos.qf.Dao.impl.EmpDaoImpl" />
  3. <!-- empServiceImpl组件 -->
  4. <bean id="empService" class="com.cos.qf.Services.impl.EmpServiceImpl" >
  5. <property name="empDao" ref="empDao"/>
  6. </bean>

测试方法:

  1. @Test
  2. public void text1(){
  3. //1. 读取配置文件中所需创建的bean对象,并获得工厂对象
  4. ApplicationContext ctx = new ClassPathXmlApplicationContext("application-config.xml");
  5. //2. 通过id获取bean对象
  6. EmpService empService = (EmpService)ctx.getBean("empService");
  7. //3. 使用对象
  8. empService.showAll();
  9. }

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3F3cTE1MTgzNDY4NjQ_size_16_color_FFFFFF_t_70

发表评论

表情:
评论列表 (有 0 条评论,72人围观)

还没有评论,来说两句吧...

相关阅读

    相关 控制

            控制反转(Inversion of Control,缩写为IoC),是[面向对象编程][Link 1]中的一种设计原则,可以用来减低计算机代码之间的[耦合度][