地子

导航

Spring学习随笔

我映像中的spring

我映像中的spring就是一个在java中解耦的框架,让开发者不用再去new 一个对象,而是直接从spring的配置文件中获取,由spring来创建这个对象,减少了代码的耦合,这个在spring的叫做IOC(控制反转)也叫依赖注入

 

依赖注入的两种方式

(1)设值注入

  通过setter方法,来把被依赖的对象引入进去

  这是最简单的接口以及实现对象impl,以下是spring.xml配置

 

  通过ClassPathXmlApplication来活动spring的bean容器,后利用getBean()方法创建Person的bean

  

private Axe axe;


public Axe getAxe() {
return axe;
}


public void setAxe(Axe axe) {
this.axe = axe;
}

@Override
public void useaxe() {
// TODO Auto-generated method stub
System.out.println(axe.chop());
}

<!--设值注入 -->
<bean id="chinese" class="exampleObj.firstStage.impl.Chinese">
<property name="axe" ref="staneaxe"></property>
</bean>

<bean id="staneaxe" class="exampleObj.firstStage.impl.StoneAxe"></bean>

(2)构造注入

构造注入就是在实现类里面写一个构造方法,引入被依赖的对象,然后再spring的配置文件里面用constructor-arg关键字把需要的bean引入进去

public class Chinese2 implements Person{
private Axe axe;

public Chinese2(Axe axe){
this.axe=axe;
}

@Override
public void useaxe() {
// TODO Auto-generated method stub
System.out.println(axe.chop());
}

}

 

<bean id="staneaxe" class="exampleObj.firstStage.impl.StoneAxe"></bean>

<!--构造注入 -->
<bean id="chinese2" class="exampleObj.firstStage.impl.Chinese2">
<constructor-arg ref="staneaxe"></constructor-arg>
</bean>

 

两种注入方式的对比

(1)设值注入比构造注入更加灵活,也比较容易理解

(2)构造注入对于依赖关系无须变化的bean,构造注入更有用处,所有的依赖关系都在构造器的内部进行,无须担心后续的代码对依赖关系产生破坏

(3)对于复杂的依赖关系用构造注入会显得代码很臃肿,比如在某些成员变量可选的情况下,多参数的构造器会显得更加笨重

(4)构造注入可以在构造器中决定依赖关系的注入顺序,优先依赖的优先注入。

(4)构造注入的依赖关系只能在构造器内部决定,只有组件的创建者才能改变组件的依赖关系,更加符合高内聚的原则

建议

对于依赖关系无须变化的注入使用构造注入,其他注入使用设值注入,以构造注入为辅,设值注入未主。

posted on 2019-07-10 13:09  地子  阅读(76)  评论(0编辑  收藏  举报