博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring之依赖注入
阅读量:5068 次
发布时间:2019-06-12

本文共 2350 字,大约阅读时间需要 7 分钟。

     一、高度耦合对象引用 

     实际的项目开发不可能全部在一个类中完成,都是由多个类组成,这些类相互之间进行写作完成特定的业务逻辑。通常,每个对象负责管理与自己相互协作的对象的引用,这将会导致对象之间的高度耦合。

   例如:

1 package com.springinaction.knights; 2 public class DamselRescuingKnight implements Knight { 3     private RescueDamselQuest quest; 4      5     public DamselRescuingKnight() { 6         quest = new RescueDamselQuest(); 7     } 8      9     public void embarkOnQuest() throws QuestException{10         quest.embark();11     }12 }
DamselRescuingKnight只能执行RescueDamselQuest的探险任务,而且DamselRescuingKnight与RescueDamselQuest形成了紧耦合的关系,极大的限制了这个骑士执行探险的能力。 二、构造器依赖注入 另一种方式,通过依赖注入(DI),对象的依赖关系将由负责协调系统中各个对象的第三方组件在创建对象时设定。对象无需自行创建或管理它们的依赖关系,依赖关系被自动注入到需要它们的对象中去。为了展示这一点,看如下代码示例。
1 package com.springinaction.knights; 2 public class BraveKnight implements Knight { 3     private Quest quest; 4      5     public BraveKnight(Quest quest) { 6         this.quest = quest; 7     } 8      9     public void embarkOnQuest() throws QuestException {10         quest.embark();11     }12 }
通过这段示例,正如看到的那样,不同于之前的DamselRescuingKnight,BraveKnight没有自行创建探险任务,而是在构造时把探险任务作为构造器参数传入。这是依赖注入的方式之一,即构造器注入。 三、xml配置文件装配Bean的方式 现在BraveKnight类可以接受你传递它的任何一种Quest的实现,但如何把特定的Quest实现传递给它呢? 创建应用组件之间协作的行为通常称为装配。Spring有多种装配Bean的方式,采用XML配置通常是最常见的装配方式,一个简单的Spring配置文件:knights.xml,该配置文件让BraveKnight接受了一个SlayDragonQuest探险任务。
1 
6
7
8
9 10
11
xml文件中声明了BraveKnight和Quest的关系。 四、观察它如何工作 Spring通过应用上下文(Application Context)装载Bean的定义并把他们组装起来。Spring应用上下文全权负责对象的创建和组装。Spring自带了几种应用上下文的实现,他们之间主要的区别仅仅是如何加载它们的配置。 因为knights.xml中的Bean是在XML文件中声明的,所以选择ClassPathX-mlApplicationContext作为应用上下文是相对比较合适的。该类加载位于应用系统classpatch下的一个或多个XML文件。下面的代码示例中的main()方法调用了 ClassPathXmlApplicationContext加载knights.xml,并获得Knight对象的引用。
1 package com.springinaction.knights; 2 import org.springframework.context.ApplicationContext; 3 import org.springframework.context.support.ClassPathXmlApplicationContext; 4  5 public class KnightMain { 6     public static void main(String[] args) { 7         ApplicationContext context = new ClassPathXmlApplicationContext("knights.xml"); 8         Knight knight = (Knight) context.getBean("knight"); 9         knight.embarkOnQuest();10     }11 }
这里的main()方法创建了一个Spring应用上下文,该应用上下文加载了knights.xml文件。然后调用了该应用上下文获取一个ID为knight的Bean,得到了Knight对象的应用。
 
 
 
 

转载于:https://www.cnblogs.com/sdlzx/p/8867355.html

你可能感兴趣的文章
sqoop数据导入到Hdfs 或者hive
查看>>
AWS国际版的Route 53和CloudFront
查看>>
bzoj 2456: mode【瞎搞】
查看>>
bzoj 2111: [ZJOI2010]Perm 排列计数【树形dp+lucas】
查看>>
excel动态去重和动态排序
查看>>
走进异步世界-犯傻也值得分享:ConfigureAwait(false)使用经验分享
查看>>
sql2000执行sql2005导出的数据脚本时出现“提示含有超过64K限度的行”(转)
查看>>
设计模式(20)-----迭代器模式
查看>>
AutoCAD.NET二次开发:创建自定义菜单(AcCui)
查看>>
NHibernate的调试技巧和Log4Net配置
查看>>
foreach和List.Foreach 退出循环相关问题
查看>>
数据转换
查看>>
同源策略
查看>>
WPF : ListBox的几种Template属性
查看>>
DirectX11 With Windows SDK--13 动手实现一个简易Effects框架、阴影效果绘制
查看>>
WPF绘制矢量图形模糊的问题
查看>>
TemplatePart用法说明
查看>>
HRMS(人力资源管理系统)-从单机应用到SaaS应用-架构分析(功能性、非功能性、关键约束)-上篇...
查看>>
intellij idea 常用快捷键 使用技巧
查看>>
关于v$datafile中system表空间的status值始终为system
查看>>