基础bean的配置可以查看:
Spring Framework系列--ApplicationContext配置标签详解(一)bean的基础标签配置
本章主要是针对依赖注入的两种方式中的构造器注入:
- 构造器注入
- setter方法注入
使用例子来说明如何进行bean的依赖配置。
和上一篇博客一样,本文的结构是以一个个小样例的形式给出,通过小样例来介绍一个个标签的作用。
样例1:
样例1是针对使用构造器注入依赖bean对象的情况,因为没有声明每个bean应该注入到哪个参数,所以这部分是由spring控制的,这就需要构造器参数之间没有什么二义性,比如两个参数使用一个接口啥的,不然spring也不知道应该谁注入谁了。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="foo" class="x.y.Foo"> <constructor-arg ref="bar"/> <constructor-arg ref="baz"/> </bean> <bean id="bar" class="x.y.Bar"/> <bean id="baz" class="x.y.Baz"/> <!-- more bean definitions for data access objects go here --> </beans>
public class Foo { public Foo(Bar bar, Baz baz) { // ... } }
标签名 | 所属上级标签 | 说明 |
<constructor-arg> | <bean> | 用来声明使用构造器创建bean对象的参数配置信息 |
<constructor-arg ref> | <constructor-arg> | 用来声明该参数依赖的bean对象 |
样例2:
样例2是针对使用构造器参数里面有基础类型参数的情况,比如int,String类型的参数。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="exampleBean" class="examples.ExampleBean"> <constructor-arg type="int" value="7500000"/> <constructor-arg type="java.lang.String" value="42"/> </bean> <!-- more bean definitions for data access objects go here --> </beans>
标签名 | 所属上级标签 | 说明 |
<constructor-arg type> | <constructor-arg> | 用来声明构造器中该参数的具体Java类型 |
<constructor-arg value> | <constructor-arg> | 用来声明构造器中该参数的值 |
样例3:
可以使用构造器中参数的顺序来配置依赖。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="exampleBean" class="examples.ExampleBean"> <constructor-arg index="0" value="7500000"/> <constructor-arg index="1" value="42"/> </bean> <!-- more bean definitions for data access objects go here --> </beans>
使用index同时还可以解决样例1中参数二义性的问题。
标签名 | 所属上级标签 | 说明 |
<constructor-arg index> | <constructor-arg> | 用来声明该参数是构造器方法的第几个参数,从0开始 |
样例4:
可以直接指定构造器中参数名称来注入依赖。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="exampleBean" class="examples.ExampleBean"> <constructor-arg name="years" value="7500000"/> <constructor-arg name="ultimateAnswer" value="42"/> </bean> <!-- more bean definitions for data access objects go here --> </beans>
需要对构造器加入注解@ConstructorProperties才可以让spring去查看构造器具体的参数名称,像这样。
public class ExampleBean { // Fields omitted @ConstructorProperties({"years", "ultimateAnswer"}) public ExampleBean(int years, String ultimateAnswer) { this.years = years; this.ultimateAnswer = ultimateAnswer; } }
标签名 | 所属上级标签 | 说明 |
<constructor-arg name> | <constructor-arg> | 用来声明该标签对应的构造器方法的参数名称 |