Spring Bean三种注入方式详解
程序员文章站
2024-02-13 08:25:40
在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 中基本算法之希尔排序的实例详解
推荐阅读
-
Spring Bean三种注入方式详解
-
spring实现bean对象创建代码详解
-
CodeIgniter中使用cookie的三种方式详解_PHP
-
spring mvc 接收表单 bean 博客分类: JavaJava Web springmvcstruts2iocdi依赖注入
-
Spring基本用法4——创建Bean的三种方式 博客分类: Spring Spring创建Bean的三种方式静态工厂方法实例工厂方法
-
Spring基本用法3——Spring容器中Bean的相关属性 博客分类: Spring SpringBean属性集合注入
-
JSP 中Spring Bean 的作用域详解
-
mysql备份的三种方式详解_MySQL
-
CodeIgniter中使用cookie的三种方式详解_php实例
-
详解python使用递归、尾递归、循环三种方式实现斐波那契数列