属性注入、构造器注入

构建Spring项目关键步骤:

1.导入依赖Jar包:202039_yLUY_2462104.png

2.编写JAVA文件,以及配置文件,机构如图所示:202202_PGP8_2462104.png

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

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

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

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

第一个是设值注入,即通过set方法注入,代码如下:

public interface Person {
    public void useAxe();
}

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

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详解

转载于:https://my.oschina.net/u/2462104/blog/846677

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值