Spring的依赖注入

在Spring中,依赖注入(Dependency Injection,简称DI)主要有两种变体,基于构造器的依赖注入和基于setter的依赖注入

基于构造器的依赖注入

基于构造函数的DI是由容器调用一个构造函数来完成的,该构造函数有许多参数,每个参数表示一个依赖项。调用具有特定参数的静态工厂方法来构造bean几乎是等价的。
例如:

public class SimpleMovieLister {

    // the SimpleMovieLister has a dependency on a MovieFinder
    private MovieFinder movieFinder;

    // a constructor so that the Spring container can inject a MovieFinder
    public SimpleMovieLister(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }

    // business logic that actually uses the injected MovieFinder is omitted...
}

在上述代码中SimpleMovieLister依赖于MovieFinder对象,SimpleMovieLister在使用MovieFinder不是直接new一个对象,而是只是声明MovieFinder对象,通过SimpleMovieLister的构造器将其注入进来。
这样做的好处在于当MovieFinder的实现改变时,例如希望给MovieFinder添加一个参数时,不仅需要改变MovieFinder的代码,还需要改变SimpleMovieLister的代码,表明SimpleMovieLister不仅依赖于MovieFinder这个接口(),还依赖于其本身的实现。代码出现了耦合。而采用依赖注入则解决了该问题。

基于Seter的依赖注入

public class SimpleMovieLister {

    // the SimpleMovieLister has a dependency on the MovieFinder
    private MovieFinder movieFinder;

    // a setter method so that the Spring container can inject a MovieFinder
    public void setMovieFinder(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }

    // business logic that actually uses the injected MovieFinder is omitted...
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值