当前位置: 移动技术网 > IT编程>开发语言>Java > Spring Bean三种注入方式详解

Spring Bean三种注入方式详解

2019年07月19日  | 移动技术网IT编程  | 我要评论

在spring容器中为一个bean配置依赖注入有三种方式:

  1.  使用属性的setter方法注入  这是最常用的方式;
  2.  使用构造器注入;
  3.  使用filed注入(用于注解方式).

field注入是最常见的一种方式,可以采用 @autowired 对bean类的接口进行初始化,代码如下

@contextconfiguration({"/meta-inf/spring/amazing-base.xml"})
@runwith(springjunit4classrunner.class)
public class springinjectiontest {
  @autowired
  private cust normalcust;
  
  @test
  public void testfieldinjection() {
    system.out.println("testfieldinjection begin");
    normalcust.recharge();
    system.out.println("testfieldinjection end");
  }
}

cust为接口,normalcust为其实现类,通过这种方式,可以通过spring容器初始化normalcust bean,进而调用recharge()方法。

构造器注入主要用于某些类因为某种原因不能作为bean,只是一个普通类。可以通过类的构造方法传入需要调用的bean接口。

@contextconfiguration({"/meta-inf/spring/amazing-base.xml"})
@runwith(springjunit4classrunner.class)
public class springinjectiontest {
  @autowired
  private cust normalcust;
  
  @test
  public void testconstructorinjection() {
    system.out.println("testconstructorinjection begin");
    chargethread thread = new chargethread(normalcust);
    thread.run();
    system.out.println("testconstructorinjection end");
  }
  
}
public class chargethread implements runnable {
  
  private cust cust;
  
  public chargethread(cust cust) {
    this.cust = cust;
  }

  public void run() {
    cust.recharge();
  }

}

上面的代码通过初始化一个线程,在初始化的时候传入bean,在线程的类中调用bean的充值方法。构造器注入特别适合多线程的编程,因为线程不能定义为bean,否则不仅会因为它是一个单例,而且会被spring容器管理。(当然你可以去定义bean为原型bean,能够有多个副本,脱离spring容器的管理),最重要的是我们要用线程池,由线程池来管理线程。

还有一种setter方法注入,这种方式能用于final类的静态方法,例如有一个充值的util类,该类是final类,其方法是静态方法。

public class springinjectiontest {
  @test
  public void testsetterinjection() {
    system.out.println("testsetterinjection begin");
    string result = rechargeutil.instantrecharge();
    system.out.println("testsetterinjection end, " + result);
  }

}

@component
public final class rechargeutil {
  
  private rechargeutil() {
    
  }
  
  private static cust normalcust;
  
  @autowired
  public void setnormalcust(cust normalcust) {
    rechargeutil.normalcust = normalcust;
  }

  public static string instantrecharge() {
    normalcust.recharge();
    return "instantrecharge success!";
  }
}

最后一种方式也成功了将normalcust注入到了rechargeutil中。

以上三种注入方式,读者可以根据实际应用场景灵活选择。也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网