栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring框架控制反转IOC功能与设计原理浅析(一)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring框架控制反转IOC功能与设计原理浅析(一)

        “Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架”,这是百度百科里面的内容。(概念自己百度,我怕讲得不好会被喷。/手动狗头)

        注意:本次内容只涉及类和浅层使用,不涉及源码。

        Spring的设计思想堪称典范,是绝佳的学习资料,今天涉及到的技术有:xml解析、工厂模式和反射。IOC(Inversion of Control)控制反转,主要作用就是通过配置文件和注解来创建Bean对象以及完成依赖注入DI(Dependency Injection)的操作,今天要说的是配置文件,不会涉及注解。

        控制反转IOC:首先大家要知道两个接口:BeanFactory和ApplicationContext,后者是前者的子接口,两者主要作用是创建对象,功能都由其子实现类完成,下面贴上一行Spring常用的创建对象的代码:

//创建spring容器对象
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//从该容器对象中获取UserService对象
UserService userService = applicationContext.getBean("userService", UserService.class);
//调用userService方法进行业务逻辑处理
userService.add();

上面用的ClassPathXmlApplicationContext便是ApplicationContext 的一个子实现类。通过带参构造传入ConfigLocation(配置文件地址),然后由BeanDefinitionReader的子实现类XmlBeanDefinitionReader(不同配置文件对应不同的子类)来解析配置文件,并根据解析后的结果生成BeanDefination(Bean的内容),再利用反射的技术结合BeanDefination生成该对象并提供getBean方法返回。为了更好理解,下面贴一张配置文件图:

 

如上图:BeanDefinition便记录了Bean对象信息(案例只用了一部分),id是Bean对象的名称且唯一(知道名字就可以知道地址,进行反射调用),property是要往userService注入的依赖,userDao也是一个可以实现的类。 依赖就是后者作为前者的一部分出现。如student和pen就是一种聚合关系的依赖:

class Student

private Pen pen;

private setPen(Pen pen){this.pen = pen;}

如上图,若要给Student注入Pen,则需要利用反射调用setPen方法和Pen对象,再将后者作为前者的参数Invoke一下就可以了,这样Pen就被注入到Student中成为了Student类的成员变量,完成依赖注入。

        以上便是大致原理,不过漏了一个比较重要的类BeanDefinitionRegistry,作用主要就是存储BeanDefinition的,没有涉及到源码,所以漏掉也不影响。

        鉴于标题,这次也不会讲源码了(其实是内容太多,起码要码半本书)。希望能对大家学习Spring的使用有一点点小小的帮助,如果内容有错误,也请大佬指正。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/760286.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号