特点
1轻量级和侵入性低
2依赖注入和面向接口实现松耦合
3面向切面编程 减少样式代码
专有名词:
1依赖注入:对象无需自行管理依赖关系。通过系统负责协调在创建对象的第三方组件的设定,实现依赖关系自动注入对象
2装配:应用组件之间的协作
3应用切面:将遍布各处的功能分离出来 形成可重用的组件
4耦合度:两者之间关系的紧密程度,即依赖关系的紧密程度
例子:
耦合度紧密:
public class DamselRescuingKnight implements Knight { private RescueDamselQuest quest; public DamselRescuingKnight() { this.quest = new RescueDamselQuest(); } public void embarkOnQuest() { quest.embark(); } }
分析:
DamselRescuingKnight 类和 RescueDamselQuest类之间紧密耦合
松耦合:
public class BraveKnight implements Knight { private Quest quest; public BraveKnight(Quest quest) { this.quest = quest; } public void embarkOnQuest() { quest.embark(); } }
DamselRescuingKnight 类 松耦合 没有与特定的Quest实现产生耦合 可以根据不同的需求进行实现的替换
通过.xml文件进行依赖注入的配置
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="knight" class="sia.knights.BraveKnight"> <constructor-arg ref="quest" /> </bean> <bean id="quest" class="sia.knights.SlayDragonQuest"> <constructor-arg value="#{T(System).out}" /> </bean> </beans>
分析:id为knight的 bean标签的注入方式是构造器注入,依赖是id为quest的bean标签 但是依赖具体的实现设置是根据class属性决定可以根据具体情况修改 实现了类的松耦合