Spring Framework系列--ApplicationContext配置标签详解(二)构造器依赖配置

基础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>用来声明该标签对应的构造器方法的参数名称
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值