当前位置: 首页 > news >正文

spring4第2课-ioc控制反转-依赖注入,是为了解决耦合问题

继续学习ioc控制反转,

IOC(Inversion of Control)控制反转,也叫依赖注入,

    目的是解决程序的耦合问题,轻量级spring的核心。

1.定义bean.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!--定义2个bean:zhangsan和lisi--><bean id="zhangsan" class="com.java1234.service.ZhangSan"></bean><bean id="lisi" class="com.java1234.service.Lisi"></bean>

  <!--定义实现业务逻辑的bean类JavaWork--><bean id="javaWork" class="com.java1234.service.JavaWork">
     <!-- tester是javaWork的一个属性。(对应JavaWork类的这一行代码: private Tester tester;)--> <property name="tester" ref="lisi"></property><!-- 上面这一行作用是给tester 注入了1个值[lisi],也是依赖注入的说法来源-->
       <!--上面这句话就是调用class对应的类(com.java1234.service.JavaWork)中的setTester方法,相当于执行【this.tester = lisi;】,使得tester这个属性绑定了具体对象lisi--><!-- 如果不想用lisi ,ref后面的值可以改成zhangsan,代码如下:<property name="tester" ref="zhangsan"></property>-->
</bean><!--补充说明:在spring出现之前,这一段tester和ref绑定的过程要在java代码实现,/*ZhangSan zhangsan=new ZhangSan();zhangsan.test();*/或者 /*Lisi lisi=new Lisi();lisi.test();*/上面的代码侵入了java程序,不利于扩展性,每次逻辑变动需要改java代码,使用spring后只要改这里bean.xml的ref配置-->
</beans>

2.接口类Tester

package com.java1234.service;public interface Tester {public void test();
}

3. 接口实现类2个:ZhangSan 和Lisi

接口实现类1:ZhangSan

package com.java1234.service;public class ZhangSan implements Tester{public void test(){// 张三是测试员System.out.println("张三-测试程序");}
}

接口实现类2:Lisi  

package com.java1234.service;public class Lisi implements Tester{public void test(){System.out.println("李四-测试程序");}
}

4.实现业务逻辑的类JavaWork 

package com.java1234.service;public class JavaWork {private Tester tester;public void setTester(Tester tester) {this.tester = tester;}public void doTest(){/* 方案1:不用spring的代码(不依赖bean.xml),缺点:有侵入业务逻辑,实现代码见下方  *//*ZhangSan zhangsan=new ZhangSan();zhangsan.test();*//*Lisi lisi=new Lisi(); Lisi.test();*//* 方案2:使用spring,需修改bean.xml内容,优点是无侵入逻辑,不管是张三还是李四,不改动这里代码 */tester.test();}
}

5. 执行main主类,可以调用实体类对象javaWork(类型是JavaWork)的doTest方法

package com.java1234.test;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.java1234.service.JavaWork;public class Test {public static void main(String[] args) {
//方案1:不使用spring的java原生态写法如下(不依赖bean.xml):JavaWork javaWork = new JavaWork();javaWork.setTester(new ZhangSan());// 或者 javaWork.setTester(new Lisi());javaWork.doTest();//方案2:使用spring的java原生态写法如下(需要配置bean.xml):ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");JavaWork javaWork=(JavaWork)ac.getBean("javaWork");javaWork.doTest();}
}

执行结果:

如果bean.xml配置的是 <property name="tester" ref="zhangsan"></property>

   效果就是打印出:张三-测试程序

如果bean.xml配置的是 <property name="tester" ref="lisi"></property>

   效果就是打印出:李四-测试程序

相关文章:

  • springboot--实战--大事件--用户接口开发
  • TS.43规范-1
  • winsock对话设计框架
  • 全志V853 mpp程序开发
  • [小白]Docker部署kingbase(人大金仓)数据库[超详细]
  • Linux `pwd` 命令深度解析与高阶应用指南
  • js判断当前设备是否为移动端
  • CSV数据处理全指南:从基础到实战
  • java 项目登录请求业务解耦模块全面
  • mysql 合集
  • 软件项目交付阶段,验收报告记录了什么?有哪些标准要求?
  • Oracle OCP认证考试考点详解083系列16
  • 《计算机组成原理》第 6 章 - 计算机的运算方法
  • 链表题解——相交链表(力扣160 easy)
  • <b> 与 <span> 等行内元素添加 margin-top 或 margin-bottom 不生效问题
  • 高精度微型导轨在3D打印机中有多重要?
  • 多相电机驱动控制学习(1)——基于双dq坐标系的六相/双三相PMSM驱动控制
  • 泰迪杯特等奖案例深度解析:基于多模态时空图神经网络的工业园区碳排放实时监测与优化系统
  • Python训练营打卡Day38
  • Common JS和ES Module的区别
  • 营销型网站制作平台/重庆seo全面优化
  • 有什么网站是专门做电商详情页/做百度推广的业务员电话
  • 做美陈3d模型网站/免费b站动漫推广网站2023
  • 制作网站哪家便宜/小网站关键词搜什么
  • 英文网站正在建设页面/sem是什么专业
  • 重庆企业做网站/怎么做公司网页