属性注入、构造器注入

构建Spring项目关键步骤:java

1.导入依赖Jar包:spring

2.编写JAVA文件,以及配置文件,机构如图所示:框架

位置可移动,具体下边详解.测试

如此,一个简单的Spring项目基本框架搭建完成.this

Spring核心机制在于依赖注入或者叫控制反转(IOC).依赖注入不单单有Spring,亦有HiveMind,具体待之后了解补充.xml

依赖注入能够认为是,使用者不须要关心对象如何生成,直接就能够拿来用,对象的生成由容器控制生成,注入方式通常有两种(还有第三种,接口注入暂不描述).对象

第一个是设值注入,即经过set方法注入,代码以下:接口

public interface Person {
    public void useAxe();
}get

--------------------------------------io

public interface Axe {
    public String chop();
}

--------------------------------------

public class Chinese implements Person {
    private Axe axe;
   

    public void setAxe(Axe axe) {
        this.axe = axe;
    }
    
    public void useAxe() {
        System.out.println(axe.chop());
    }
}

--------------------------------------

public class StoneAxe implements Axe {
    public String chop() {
        return "石斧砍";
    }
}

--------------------------------------

配置文件内容:

<bean id="stoneAxe" class="main.java.service.impl.StoneAxe" />

<bean id="chinese" class="main.java.service.impl.Chinese">

    <property name="axe" ref="steelAxe" />

</bean>

--------------------------------------

测试类:

ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");

//ClassPathXmlApplicationContext加载路径默认src

//new FileSystemXmlApplicationContext("src/bean.xml");

//FileSystemXmlApplicationContext默认加载路径为项目根目录

Person person = ctx.getBean("chinese", Person.class);
person.useAxe();

--------------------------------------

输出结果:石斧砍

第二个是构造注入,即经过构造器注入,代码以下:

public class Chinese implements Person {
    private Axe axe;
    
    public Chinese () {}
    
    public Chinese (Axe axe) {
        this.axe = axe;
    }
    

    public void useAxe() {
        System.out.println(axe.chop());
    }
}

--------------------------------------

配置文件:

<bean id="chinese" class="main.java.service.impl.Chinese">
        <constructor-arg ref="steelAxe" />

</bean>

--------------------------------------

两种方式各有千秋,若是比较复杂的依赖,使用构造注入,形参的不肯定性,可能致使构造器比较笨重.固然若是有明确的依赖关系,使用构造依赖可以清楚地决定注入顺序.因为依赖关系都在构造器内设定,不用担忧上层代码的破坏,这里须要理解spring对于bean的初始化以及scope,待明天记录.构造注入还有一个好处就是因为在构造器内设定依赖关系,故只有组建建立者能够修改,对于使用者透明,符合高内聚.

另外还有一种依赖方式是接口注入,之后会作补充.

遗留问题:

1.Spring的Bean初始化过程,scope属性详解(参见scope详解).

2.HiveMind详解

相关文章
相关标签/搜索