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)构造注入的依赖关系只能在构造器内部决定,只有组件的创建者才能改变组件的依赖关系,更加符合高内聚的原则
建议
对于依赖关系无须变化的注入使用构造注入,其他注入使用设值注入,以构造注入为辅,设值注入未主。