Spring Bean三种注入方式详解
程序员文章站
2024-04-02 07:58:34
在spring容器中为一个bean配置依赖注入有三种方式:
使用属性的setter方法注入 这是最常用的方式;
使用构造...
在spring容器中为一个bean配置依赖注入有三种方式:
- 使用属性的setter方法注入 这是最常用的方式;
- 使用构造器注入;
- 使用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中。
以上三种注入方式,读者可以根据实际应用场景灵活选择。也希望大家多多支持。
上一篇: Java-JFrame-swing嵌套浏览器的具体步骤
下一篇: Spring Boot发送邮件详解