一、引言

学习spring不可避免的会涉及到IOC,IOC目的就是为了解耦,用一个中介容器控制不同模块之间的联系。当时为了解决对象之间的耦合度过高的问题,软件专家Michael Mattson提出了IOC理论,用来实现对象之间的“解耦”。

简单来讲可以用一下的图说明,以前的面向对象程序相互依赖,深度结合,可能在里面有各种new操作:

在使用IOC改变后的程序如下,模块之间没有了特别直接的联系,耦合都降低了:

二、IOC(DI)的三种使用

这三种使用方法各自独立,可以单独使用,注解方法都是后来兴起的,但是大家一般都习惯使用混合式的,其他的介绍只是为了让大家了解。

1、xml配置方法

  • 函数调用bean配置文件
 public String springtest() {ApplicationContext context=new ClassPathXmlApplicationContext("classpath:spring/bean1.xml");TestService testService= (TestService) context.getBean("testService");testService.add();return "success";}
  • bean配置文件(将dao当作属性注入到service中,当然service中也有dao的对象)
<?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-3.0.xsd"><bean id="testDao" class="com.xcy.dao.TestDao"></bean><bean id="testService" class="com.xcy.service.TestService"><property name="testDao" ref="testDao"></property></bean></beans>
  • serviceydao文件
public class TestService {private TestDao testDao;public TestDao getTestDao() {return testDao;}public void setTestDao(TestDao testDao) {this.testDao = testDao;}public void add() {System.out.print("==service==");testDao.add();}
}
public class TestDao {public void add() {System.out.println("==dao==");}
}

2、注解方法

  • 调用函数
@Controller
public class Hellowmvn {@AutowiredTest2Service test2Service;@RequestMapping(value="/Hellowmvn2")@ResponseBodypublic String test2() {return test2Service.test();}
}
  • bean配置(扫描注解配置,针对@repository@component@service@controller)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  http://www.springframework.org/schema/context   http://www.springframework.org/schema/context/spring-context-4.0.xsd  http://www.springframework.org/schema/aop   http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  http://www.springframework.org/schema/tx   http://www.springframework.org/schema/tx/spring-tx-4.0.xsd  http://www.springframework.org/schema/mvc   http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd  http://www.springframework.org/schema/context   http://www.springframework.org/schema/context/spring-context-4.0.xsd"><!--开启注解扫描  --><context:component-scan base-package="com.xcy.service"></context:component-scan>
<!--             <bean id="testService" class="com.xcy.service.TestService"></bean>--></beans>
  • 添加注解的service类
@Service(value="test2Service")
public class Test2Service {public String test() {return "xcyservice";}
}

3、xml配置与注解混合使用

混合方法使用核心:通过xml配置进行对象创建,使用注解进行属性注入,将属性注入过程从xml配置中分解出来==

  • 调用函数(属性注入)
@Controller
public class Hellowmvn {@AutowiredTestService testService;@RequestMapping(value="/Hellowmvn")@ResponseBodypublic String test() {return testService.test();}}
  • service类
public class TestService {public String test() {return "xcyservice";}
}
  • bean配置(对象创建)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  http://www.springframework.org/schema/context   http://www.springframework.org/schema/context/spring-context-4.0.xsd  http://www.springframework.org/schema/aop   http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  http://www.springframework.org/schema/tx   http://www.springframework.org/schema/tx/spring-tx-4.0.xsd  http://www.springframework.org/schema/mvc   http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd  http://www.springframework.org/schema/context   http://www.springframework.org/schema/context/spring-context-4.0.xsd"><!--开启注解扫描  -->
<            <bean id="testService" class="com.xcy.service.TestService"></bean>
</beans>

三、总结

  • IOC的原理与作用;
  • IOC xml配置方法使用;
  • IOC注解方法使用;
  • IOC混合方法使用;

JavaWeb——IOC相关推荐

  1. JavaWeb知识总结

    一.知识介绍 最近看了逻辑思维最后一期,现在我们都处在碎片化的学习中,这不可避免,但是我们还是要把这些碎片梳理下,毕竟脑子记最后剩下的东西才是自己的== 1.编程语言通用学习结构 其实各类语言都差的不 ...

  2. JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试

    Spring框架学习路线 Spring的IOC Spring的AOP,AspectJ Spring的事务管理,三大框架的整合 Spring框架概述 什么是Spring?  Spring是分层的Java ...

  3. 使用maven搭建ssm框架的javaweb项目

    目前主流的javaweb项目,常会用到ssm(Spring+Spring MVC+Mybatis)框架来搭建项目的主体框架,本篇介绍搭建SSM框架的maven项目的实施流程.记之共享! 一.SSM框架 ...

  4. 2020最新Java面试题(java,JavaWeb,数据库,框架),常见面试题及答案汇总

    1.面试题模块汇总 面试题包括以下十九个模块:Java 基础.容器.多线程.反射.对象拷贝.Java Web 模块.异常.网络.设计模式.Spring/Spring MVC.Spring Boot/S ...

  5. JavaWeb学习之路——SSM框架之Spring(五)

    前情提要请看JavaWeb学习之路--SSM框架之Spring(四)                                         整合Spring和Mybatis框架 1.在项目的 ...

  6. 后端学习 - JavaWeb

    技术体系 文章目录 一 HTML 1 网页的组成部分 2 HTML 概述 3 HTML 标签 4 常用标签 5 表单与表单的提交 二 CSS 1 语法格式 2 使用方法 三 JavaScript 1 ...

  7. Javaweb经典三层架构的演变

    1.Javaweb经历了三个时期 ①JSP Model1第一代  JSP Model1是JavaWeb早期的模型,它适合小型Web项目,开发成本低!Model1第一代时期,服务器端只有JSP页面,所有 ...

  8. javaweb成长之路:SSM框架搭建

    学习javaweb开发,框架的学习是难以避免的,合理的使用框架进行开发,可以很大程度的提升开发效率,减少开发者的工作量.随着it行业的不断发展,各种框架也是层出不穷,目前使用最广的框架应该是属于ssm ...

  9. Spring IOC(控制反转)思想笔记

    Spring IOC(控制反转)思想笔记 IOC控制反转基本理念就是将程序控制权从程序员手中交给用户自定义,从而避免了因为用户一个小需求的变化使得程序员需要改动大量代码. 在这里插入图片描述 案例 如 ...

最新文章

  1. 【java】增强for循环的简单使用(遍历数组)
  2. 一人之力,刷爆三路榜单!信息抽取竞赛夺冠经验分享
  3. 嬴彻与东风商用车完成L3重卡A样车验收,加速自动驾驶产品化
  4. mysql create table 语法详解
  5. c语言流水灯小程序,流水灯小程序.doc
  6. 7-5 排列的字典序问题 (10 分)(思路加详解全排列问题+vector容器做法)Come Baby!
  7. 不愧是阿里大佬,mysql存储过程写法案例
  8. 史上最全提升GPU的tricks合集
  9. MySQL_自定义函数
  10. python基础之元组定义进阶操作、字典定义进阶操作
  11. CentOS 6.5安装chromium
  12. sad代价计算_基于改进代价计算和自适应引导滤波的立体匹配
  13. cdrom是什么意思_开启电脑时出现CDROM是什么意思
  14. 如何避免渠道商的“养卡”和“劝弃卡”行为的发生
  15. shiro 权限框架
  16. android oreo 老机型,Android Oreo 通知新特性,这坑老夫先踩了
  17. 中间件-MyCat学习笔记
  18. 计算机语言输入法,输入法不见了如何解决
  19. Chef学习之三:Chef基础知识 (转贴)
  20. 1095 Cars on Campus

热门文章

  1. python保持登录状态_Python-保持登录状态进行接口测试
  2. centos7火狐浏览器上不了网_网络问题备忘:能ping通,就是上不了网
  3. JQ实现单击按钮 倒计时获取验证码
  4. 伪元素选择器使用场景2-仿土豆网显示隐藏遮罩案例(CSS3)
  5. c++之std::distance()函数
  6. Python连接mysql密码用密文_druid配置数据库连接使用密文密码
  7. [Usaco2008 Mar]River Crossing渡河问题
  8. 基于layui的select区域联动
  9. C++开发 面试问题总结(中兴、CVTE、瑞晟、华为、YY)
  10. zookeeper-大数据Week6-DAY1-1-Zookeeper