网站前端改版涉及到的问题,wordpress企业官网主题,小程序链接网站自己做,网站关键词seo费用---------------siwuxie095 IoC#xff0c;即 Inversion of Control#xff0c;控制反转#xff0c;它是 Spring 容器的内核 AOP、声明式事务等功能都是在此基础上开花结果#xff0c;即 都依赖于 IoC IoC 涉及代码解耦、设计模式、代码优化等问题的考量 从以下三方面来… ---------------siwuxie095 IoC即 Inversion of Control控制反转它是 Spring 容器的内核 AOP、声明式事务等功能都是在此基础上开花结果即 都依赖于 IoC IoC 涉及代码解耦、设计模式、代码优化等问题的考量 从以下三方面来深入了解 IoC · IoC 的初步理解 · IoC 的注入类型 · IoC 的注入方式 IoC 的初步理解 IoC 概念重要却比较晦涩难懂通过如下实例来说明 实例场景电影《无间道》中刘德华所饰演的角色刘建明在天台的对白 即电影无间道---角色刘建明---演员刘德华 在传统的编程模式中是剧本和演员直接耦合即 剧本直接指定刘德华来表演 显然在以上剧本中作为具体角色饰演的刘德华直接侵入到 剧本中使剧本和演员直接耦合在了一起 一个明智的编剧在剧情创作时应该围绕故事的角色来进行 而不应该考虑角色具体的饰演者这样才能在剧本投拍时自 由的选择演员而并非绑定在刘德华一个人身上 通过以上分析发现需要为主人公刘建明角色定义一个接口 引入剧本角色刘建明。剧本情节就通过角色来展开在拍摄时 角色由演员来饰演就如上图中无间道、刘建明、和刘德华三 者之间的关系 在上图中无间道同时依赖刘建明和刘德华 并没有达到期望剧本仅依赖于角色 但角色必须通过具体的演员才能拍摄完成如何让刘德华和剧本 无关又能完成刘建明的具体动作呢可以引入导演 在引入导演之后剧本和饰演者完全解耦 首先建立一个导演类然后导演选择一个剧本无间道同时为剧本指定 一个角色刘建明让刘建明插入到无间道中最后让刘德华来饰演刘建明 通过引入导演使剧本和具体的饰演者彻底解耦。对应到软件中导演就像 是一个装配器它来安排演员表演具体角色 IoC 的概念IoC 从字面上看就是 控制 和 反转 到底是什么东西的控制被反转了对应到前面的实例 控制 是指选择刘建明角色扮演者的控制权而 反转 是指这种 控制权从无间道剧本中移除转交到导演手中 对于软件来说即 某一个接口的具体实现类的控制权从调用类 中移除转交给第三方决定 因为 IoC 确实不够开门见山因此业界曾进行了广泛的讨论最终 软件界的泰斗级人物 Martin Fowler 提出了 DI 的概念用以代替 IoC 即 让调用类对某一接口实现类的依赖关系由第三方容器 或 协作类 注入以移除调用类对某一接口实现类的依赖 依赖注入 这个名词显然比 控制反转 直接明了、易于理解 DI即 Dependency Injection IoC 的注入类型 从注入方法上看主要划分为三种类型 · 构造函数注入 · 属性注入 · 接口注入 1构造函数注入 通过调用类的构造函数将接口实现类通过构造函数变量传入 如WuJianDao 即调用类LiuJianming 即接口LiuDehua 即接口实现类 2属性注入 通过 Setter 方法完成调用类所需依赖的注入更加灵活方便 如虽然刘建明是无间道的第一主角但并非每个场景都需要刘建明出现 在这种情况下通过构造函数注入并不妥当这时可以使用属性注入 3接口注入 将调用类所有依赖注入的方法抽取到一个接口中调用类通过实现该接口提供相应的注入方法 如ActorArrange 即接口调用类 WuJianDao 实现该接口 由于通过接口注入需要额外声明一个接口这无疑增加了类的数目 而且效果和属性注入并无本质区别因此不提倡采用这种方式 虽然 WuJianDao 和 LiuDehua 实现了解耦 WuJianDao 无需关注 角色实现类的实例化工作但这些工作在代码中依然存在只是转移 到 Director 类中而已 假设某一制片人想改变这一局面在选择某个剧本后希望通过一个 媒体海选 或 第三方中介机构 来选择导演、演员让他们各司其职 那剧本、导演、演员就都实现了解耦 所谓 媒体海选 和 第三方中介机构在程序领域即是一个第三方的容器 它帮助完成类的初始化与装配工作让开发者从这些底层实现类的实例 化、依赖关系装配等工作中脱离出来专注于更有意义的业务逻辑开发 工作这无疑是一件令人向往的事情Spring 就是这么一个容器 IoC 的注入方式 Spring 作为一个容器通过 配置文件 或 注解 描述类和类之间的 依赖关系自动完成类的初始化和依赖注入的工作 下面是对以上实例进行配置的配置文件片段 通过 new XmlBeanFactory(xxx.xml) 等方式即可加载导入配置文件 并同时启动 IoC 容器 在容器启动时Spring 根据配置文件的描述信息自动实例化 Bean 并完成 依赖关系的装配从容器中即可返回准备就绪的 Bean 实例后续可直接使用 Spring 为什么会有这种神奇的力量仅凭一个简单的配置文件就能魔法般 地实例化并装配好程序所用的 Bean 呢 这种神奇的力量归功于 Java 语言本身的类反射功能 【made by siwuxie095】 转载于:https://www.cnblogs.com/siwuxie095/p/6736986.html