从注入方法上看,主要可以划分为三种类型:构造函数注入,属性注入和接口注入。
Spring支持构造方法和属性注入,下面我们来介绍这三种注入方式的区别。
1.构造函数注入
在构造函数中,我们通过调用类的构造函数,将接口实现类通过构造函数变量出入,如下代码
package Ioc; /** * @Author: hegx * @Description: * @Date: 9:43 2017/7/12 */ public class Geli { public String responseAsk(String response) { return response; } }
package Ioc; /** * @Author: hegx * @Description: * @Date: 9:42 2017/7/12 */ public class MoAttack { private Geli geli; //注入Geli的具体实现 public MoAttack(Geli geli) { this.geli = geli; } public void getCityGateAsk() { geli.responseAsk("墨者隔离"); } }
2.从属性进行注入
package Ioc; /** * @Author: hegx * @Description: * @Date: 9:42 2017/7/12 */ public class MoAttack { private Geli geli; //属性注入 public void setGeli(Geli geli) { this.geli = geli; } public void getCityGateAsk() { geli.responseAsk("墨者隔离"); } }
3.接口注入
package Ioc; /** * @Author: hegx * @Description: * @Date: 11:25 2017/7/12 */ public interface ActorArrangable { public void injectGeli(Geli geli); }
package Ioc; /** * @Author: hegx * @Description: * @Date: 11:26 2017/7/12 */ public class MoAttack2 implements ActorArrangable { private Geli geli; @Override public void injectGeli(Geli geli) { this.geli =geli; } private void cityGateAsk() { geli.responseAsk("墨者隔离"); } }
由于接口注入需要额外的声明一个接口,增加类的数目,而且他的效果和属性并没有本质上面的区别,因此我们不提倡采用这种注入方式。