我们调用一个类的方法,首先是User user=new  User(),对象调用这个方法,user.add(),这种方法有一个缺陷就是代码的耦合度太高,比如你的servlet调用User类里的方法,需要在servlet中new User()对象,如果类名发生改变,需要变动的地方就多了。

后来人们想到用工厂模式解耦合,首先建一个工厂类,工厂类有一个返回UserService的方法,比如说你的servlet中要调用service方法时就可以用UserService s=Factory.getService();,但是这样又有一个问题就是servlet和工厂类耦合了。开发有一种思想就是高内聚,低耦合,也就是说在一个类中要紧密相连,在不同的类最好不要关联的紧密。

IOC原理

控制反转

现在有两个类,UserService和UserServlet,我现在要在UserServlet中得到UserService的对象,原始的方法就是new创建一个UserService对象,我们现在用Spring可以这么来做,

第一步:创建一个xml配置文件,配置要创建的对象类,<bean id="userService" class="com.UserService">

第二步:创建工厂类,使用dom4j解析配置文件+反射

工厂类有个返回userService的方法,这个方法中

1 使用dom4j解析xml文件,根据id值userService得到id值对象class属性值,也就是类的属性

2 使用反射创建类对象

Class clazz=Class.forName(classValue);

UserService service=clazz.newInstance();

return service;

这时在userServlet中调用userService的方法就是UaserFactory.getService();这样你的userService改变的话就只需要在配置文件中修改就可以了,降低了类的耦合度。

spring的IOC底层原理的更多相关文章

  1. Spring IoC底层原理

    -------------------siwuxie095                                 Spring IoC 底层原理         1.IoC 即 Invers ...

  2. 漫画 | Spring AOP的底层原理是什么?

    1.Spring中配置的bean是在什么时候实例化的? 2.描述一下Spring中的IOC.AOP和DI IOC和AOP是Spring的两大核心思想 3.谈谈IOC.AOP和DI在项目开发中的应用场景 ...

  3. Spring_day01--课程安排_Spring概念_IOC操作&IOC底层原理&入门案例_配置文件没有提示问题

    Spring_day01 Spring课程安排 今天内容介绍 Spring概念 Spring的ioc操作 IOC底层原理 IOC入门案例 配置文件没有提示问题 Spring的bean管理(xml方式) ...

  4. 2020-04-08:谈一下IOC底层原理

    Ioc的底层原理 (1)xml配置文件 (2)dom4j解析xml (3)工厂设计模式 (4)反射

  5. 理解Spring:IOC的原理及手动实现

    Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架.也是几乎所有Java工作者必须要掌握的框架之一,其优秀的设计思想以及其代码实现上的艺术也是我们需要掌握的. ...

  6. Spring的IOC底层实现

    IOC的底层实现 续图:

  7. 简单解析Spring核心IOC容器原理

    将大体流程解析了一边,具体可以看源代码一个方法一个方法的跟下 XmlBeanFactory的功能是建立在DefaultListableBeanFactory这个基本容器的基础上的,并在这个基本容器的基 ...

  8. Spring之IOC实现原理

  9. Spring之IOC原理及代码详解

    一.什么是IOC 引用 Spring 官方原文:This chapter covers the Spring Framework implementation of the Inversion of ...

随机推荐

  1. 牛客国庆集训派对Day_4~6

    Day_4 A.深度学习 题目描述 小 A 最近在研究深度学习,他自己搭建了一个很牛逼的神经网络,现在他手头一共有 n 组训练数据,一开始他会给自己的神经网络设置一个 batch size,假设为 B ...

  2. (转)深入理解Java对象的创建过程

    参考来源:http://blog.csdn.net/justloveyou_/article/details/72466416 摘要: 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一 ...

  3. JSP分页技术的实现(利用当前页进行前后加减,并利用href进行当前页面传值,传值当然是那个当前值变量)

    一.可滚动结果集   Connection con  = DriverManager.getConnection(); PreparedStatement stmt = con.prepareStat ...

  4. C#基础学习4

    流程控制!

  5. sc服务查询

    sc query lanmanse2rver |find /i "state" |find /i "running" || ( echo 该服务没有运行时,要执 ...

  6. 消息中间件与RPC的区别

    消息中间件和消息通信与RPC各自具有怎样的优势,如何互补消息中间件主要实现的是异步.弹性消息以及队列,弹性消息有时可以借助于外存从而一定程度上可以实现峰值缓存,有效均衡服务器端压力,同时消息可以进行一 ...

  7. Android掌中游斗地主游戏源码完整版

    源码大放送-掌中游斗地主(完整版),集合了单机斗地主.网络斗地主.癞子斗地主等,有史以来最有参考价值的源码,虽然运行慢了一点但是功能正常,用的是纯java写的. 项目详细说明:http://andro ...

  8. ML-学习提纲1

    http://www.sohu.com/a/130379077_468714 本文用一系列「思维导图」由浅入深的总结了「统计学」领域的基础知识,是对之前系列文章做的一次完整的梳理,也是我至今为止所有与 ...

  9. uva12433 Rent a Car

    init 一开始搞成2*n+2了...囧  所以初始化很重要! 然后提交的时候忘了删调试的数据了..囧 技巧:设立虚拟节点 建图比较麻烦(非常). 要考虑到保养完了的车可以免费再用 设立S,T  ,1 ...

  10. js将时间戳装换成日期格式

    13位时间戳改为yyyy-MM-dd HH-mm-ss 格式 目标时间戳:1516324500000 formatDateTime (unix) { // 转换时间戳 var date = new D ...