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

大悟网站建设做机械设计的网站

大悟网站建设,做机械设计的网站,怎么给网站做关键词搜索,安徽网站建设整体策划方案IOC 是 Inversion of Control 的简写#xff0c;译为“控制反转”#xff0c;Spring 通过 IOC 容器来管理所有 Java 对象的实例化和初始化#xff0c;控制对象与对象之间的依赖关系。我们将由 IOC 容器管理的 Java 对象称为 Spring Bean#xff0c;它与使用关键字 new 创建…IOC 是 Inversion of Control 的简写译为“控制反转”Spring 通过 IOC 容器来管理所有 Java 对象的实例化和初始化控制对象与对象之间的依赖关系。我们将由 IOC 容器管理的 Java 对象称为 Spring Bean它与使用关键字 new 创建的 Java 对象没有任何区别。1 控制反转IOC抛开Spring等框架一个类想要调用另一个类中的属性或方法通常会先在其代码中通过 new Object() 的方式将后者的对象创建出来然后才能实现属性或方法的调用那么调用类掌握着被调用类的控制权。在 Spring 应用中Java 对象创建的控制权是掌握在 IOC 容器手里的也就是说 IOC 容器掌握着这些被调用类的控制权。其步骤如下开发人员通过 XML 配置文件、注解、Java 配置类等方式对 Java 对象进行定义例如在 XML 配置文件中使用 bean 标签、在 Java 类上使用 Component 注解等。Spring 启动时 IOC 容器会自动根据对象定义将这些对象创建并管理起来。这些被 IoC 容器创建并管理的对象被称为 Spring Bean。当我们想要使用某个 Bean 时可以直接从 IOC 容器中获取例如通过 ApplicationContext 的 getBean() 方法而不需要手动通过代码例如 new Obejct() 的方式创建。IOC 使得应用开发从思想层面上发生了“主从换位”的改变。原本调用者是主动的一方它想要使用什么资源就会主动出击自己创建但在 Spring 应用中IOC 容器掌握着主动权调用者则变成了被动的一方被动的等待 IOC容器创建它所需要的对象Bean。这个过程在职责层面发生了控制权的反转把原本调用者通过代码实现的对象的创建反转给 IoC 容器来帮忙实现因此我们将这个过程称为 Spring 的“控制反转”它最大的优势在于解耦合。1.1 IOC 的工作原理软件开发过程中各对象和模块间不可避免地存在一定地耦合关系比如B调用AC调用BA调用C若一个系统的耦合度过高那么就会造成难以维护的问题但完全没有耦合的代码几乎无法完成任何工作。因此我们在程序设计时所秉承的思想一般都是在不影响系统功能的前提下最大限度的降低耦合度。IoC 底层通过工厂模式、Java 的反射机制、XML 解析等技术将代码的耦合度降低到最低限度其主要步骤如下在配置文件例如 Bean.xml中对各个对象以及它们之间的依赖关系进行配置我们可以把 IOC 容器当做一个工厂这个工厂的产品就是 Spring Bean容器启动时会加载并解析这些配置文件得到对象的基本信息以及它们之间的依赖关系IoC 利用 Java 的反射机制根据类名生成相应的对象即 Spring Bean并根据依赖关系将这个对象注入到依赖它的对象中。由于对象的基本信息、对象之间的依赖关系都是在配置文件中定义的并没有在代码中紧密耦合因此即使对象发生改变IOC都会自动在配置文件中进行修改 Java 代码涉及调用关系则不需要变动这就是 Spring IoC 实现解耦的原理。1.2 以Component举例关于实现控制反转将类Spring Bean注入到IOC容器中主要有以下注解controller 用于标注控制层service 用于标注服务层主要用来进行业务的逻辑处理repository用于标注数据访问层也可以说用于标注数据访问组件即DAO组件component用于标注各种组件若该类不同于以上归类可使用该注解。那么如果想将对应的Spring Bean从IOC容器中取出来一般是用 Autowired或 Resourse注解这将在依赖注入部分进行举例。首先创建一个类然后以new形式和Component注解形式分别解释① 创建Called类编写该类的无参构造若该类被调用就会在控制台上输出该类被创建成功public class Called {public Called(){System.out.println(该类被创建成功);} }② new方式创建对象我们在Call类中的main方法中new一个Called对象public class Call {public static void main(String[] args) {Called called new Called();} }执行main方法输出成功说明Called对象创建成功③ 给Called类标注Component注解Component public class Called {public Called(){System.out.println(该类被创建成功);} }④ 执行项目启动类控制台输出成功说明项目启动后Called类已作为Spring Bean注入Spring的IOC容器2 依赖注入DI依赖注入Denpendency Injection简写为 DI是 Martin Fowler 在 2004 年在对“控制反转”进行解释时提出的。Martin Fowler 认为“控制反转”一词很晦涩无法让人很直接的理解“到底是哪里反转了”因此他建议使用“依赖注入”来代替“控制反转”。在面向对象中对象和对象之间是存在一种叫做“依赖”的关系。简单来说依赖关系就是在一个对象中需要用到另外一个对象即对象中存在一个属性该属性是另外一个类的对象比如A调用B那么可以说A依赖B。依赖注入本质上是Spring Bean属性注入的一种只不过这个属性是一个对象属性而已。我在这边加大点难度以“调用类-接口-实现类最终的被调用方“形式可能需要一点关于接口的java基础。2.1 单接口单实现类顾名思义调用类调用接口的方法且该方法只被一个实现类实现① 创建CalledInterface接口在里边写一个抽象方法public interface CalledInterface {String getString();}② 使Called类实现该接口也重写了getString抽象方法Component public class Called implements CalledInterface{public Called(){System.out.println(该类被创建成功);}Overridepublic String getString() {return getString 方法被调用;} }③ Call类注入该接口并作为控制层以Autowired为例RestController public class Call {Autowiredprivate CalledInterface calledInterface;RequestMapping(/call)public String call() {return calledInterface.getString();} }④ 执行项目启动类并访问该接口输出成功说明注入成功。2.2 单接口多实现类如果该接口有多个实现类呢该如何处理首先增加另一个实现类试试Component public class CalledAnother implements CalledInterface{Overridepublic String getString() {return CalledAnother 的 getString 方法被调用;} }然后执行启动类可以看到项目报错了说明系统不知道该调用哪个实现类的getString()方法。主要有以下几种解决方法Qualifier(类名)Autowired Qualifier(类名) 指定具体实现类用在控制层Resource(name 类名)这也可以实现用在控制层Primary表示该实现类是主实现类默认使用该类方法。用在实现类而且可以使用 Component(自定义类名) 和 Service(自定义类名) 在实现类上自定义类名。这里以Resource(name 类名)和Service(自定义类名)为例① Called类使用Service(自定义类名)Service(自定义类名) public class Called implements CalledInterface{public Called(){System.out.println(该类被创建成功);}Overridepublic String getString() {return Called 的 getString 方法被调用;} }② Call类使用Resource(name 类名)RestController public class Call {Resource(name 自定义类名)private CalledInterface calledInterface;RequestMapping(/call)public String call() {return calledInterface.getString();}}③ 执行项目启动类并访问该接口说明指定具体实现类成功其实还有好几种搭配方式感兴趣的小伙伴可以自己尝试一下~参考文章1.Spring IoC控制反转 (biancheng.net)2.控制反转与依赖注入_望天边星宿的博客-CSDN博客
http://www.laogonggong.com/news/104937.html

相关文章:

  • 网站开发怎么实现用户一对一发文字图片租房网站开发报告
  • 福田网站设计公司网站建设报价分析
  • 网站建设语音wordpress会员支付系统
  • 网站seo站外优化wordpress怎么破解
  • 上海市普陀区建设规划局网站网站小程序制作公司
  • 教育学校网站建设中国营销传播网网址
  • 一级做爰片软件网站专业的网站建设
  • 网站建设四个阶段的流程邯郸网站建设有哪些
  • 网站设计制作太原湖南关键词优化排名推广
  • 公司网站公司陕西省建设监理协会网站证件查询
  • 怎么做系统软件网站iis7.5 没有默认网站
  • 公司网站的seo优化怎么做网站建设保密
  • 怎么制作免费的企业网站外贸网站怎么做会吸引眼球
  • 找销售的网站做任务兼职赚钱的网站有哪些
  • 网站建设验收乐山建设网站
  • 站酷网怎么赚钱高邮市建设局网站首页
  • 招聘做牙技工的网站物流的网站模板免费下载
  • 企业网站首页设计评价怎样进入wordpress
  • 企业官网建站网站画图软件在线
  • 河北廊坊做网站怎么做招聘网站链接
  • 团队建设网站php网站开发教程 pdf
  • 快速搭建网站的工具有哪些简述网站的四种常见结构
  • 郑州网站推广 汉狮网络怎样用记事本做网站
  • 响应式网站 768 320关于加强门户网站建设的通知
  • 黄岩区建设局网站wordpress 登录用户名密码
  • 庐阳网站快速排名常熟网站网站建设
  • 沈阳网站建设发布蕲春做网站
  • 网站建设全过程关键词排名优化公司外包
  • 网站出现死链怎么办专业创业服务平台网站建设需求
  • 网站运营预期效果郑州网站建设伟置