`
Joson_Coney
  • 浏览: 57493 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring构造器注入

阅读更多

(转自:http://javasight.net/2011/05/spring-contructor-inject-example/

 

 

 

 

在本示例中你将学到如何通过构造器注入来设置bean的属性。考虑如下的User bean类。

 

package net.javasight.designpattern.spring;

public class User {
        private String name;
        private int age;
        private String country;

        User(String name, int age, String country) {
                this.name = name;
                this.age = age;
                this.country = country;
        }

        public String toString() {
                return name + " is " + age + " years old, living in " + country;
        }
}

User类有三个属性:name, age,country。所有的三个属性是通过构造器注入来设置。User的toString()方法覆盖来展示用户对象信息。

下面是beans.xml你勇于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="user" class="net.javasight.designpattern.spring.User">
                <constructor-arg value="Eswar" />
                <constructor-arg value="24" />
                <constructor-arg value="India" />
        </bean>
</beans>

bean中的constructor-arg元素用于通过构造器注入来设置属性。因为User类中只有一个构造器,所以该代码没有任何问题。当有相同个数的构造方法时,将会出现冲突。考虑如下代码:

        User(int age, String country) {
                this.age = age;
                this.country = country;
        }

        User(String name, String country) {
                this.name = name;
                this.country = country;
        }

下面是配置文件。

        <bean id="user" class="net.javasight.designpattern.spring.User">
                <constructor-arg value="24" />
                <constructor-arg value="India" />
        </bean>

那么现在你认为哪个构造器将被调用?第一个带有int和String参数的,是吧?但是你将惊讶于Spring将调用第二个构造方法。即使我们知道第一个参数是int第二个参数是String,spring将其都解析为String。要避免该冲突,你需要定义constructor-arg的 type 属性。现在如下配置,第一个构造方法将被调用。

        <bean id="user" class="net.javasight.designpattern.spring.User">
                <constructor-arg type="int" value="24" />
                <constructor-arg type="java.lang.String" value="India" />
        </bean>

那么现在考虑如下情况。我们在User类中有如下的构造方法

        User(String name, int age) {
                this.name = name;
                this.age = age;
        }

        User(int age, String country) {
                this.age = age;
                this.country = country;
        }

配置文件如下.

<bean id="user" class="net.javasight.designpattern.spring.User">
        <constructor-arg type="int" value="24" />
        <constructor-arg type="java.lang.String" value="India" />
</bean>

那么现在你认为哪个构造方法将被调用?第二个,是吗?但是你将又一次吃惊,这是因为在调用构造方法配置文件中定义的参数顺序不做考虑。要解决该问题,需要指定index

下面是增加了index属性的配置文件:

<bean id="user" class="net.javasight.designpattern.spring.User">
        <constructor-arg index="0" type="int" value="24" />
        <constructor-arg index="1" type="java.lang.String"
                value="India" />
</bean>

现在,如我们所期待的,第二个构造方法将被调用.

分享到:
评论

相关推荐

    基于SpringBoot构造器注入循环依赖及解决方式

    在Spring Boot应用中,构造器注入是一种常见的依赖注入方式,但它可能会引发循环依赖的问题。循环依赖是指两个或多个Bean之间形成一个闭环,彼此依赖对方,导致Spring容器在初始化Bean时无法确定创建顺序,从而抛出...

    Spring依赖注入使用构造设注入demo

    本篇将详细讲解如何使用构造器注入作为Spring依赖注入的一种方式,并通过一个完整的可运行示例——"SpringIOCTest2"来加深理解。 首先,理解依赖注入的概念。依赖注入允许我们不在类内部创建对象,而是通过外部源...

    Spring框架构造注入操作实战案例

    该变量将在构造器中被初始化,通过构造注入steelAxe bean实例作为参数传递给Chinese构造器。 在Spring框架中,构造注入可以通过两种方式实现,一种是使用constructor-arg元素,另一种是使用 @Autowired 注解。使用...

    spring介绍(set和构造器注入)

    标题中的“spring介绍(set和构造器注入)”是指在Spring框架中两种主要的依赖注入(Dependency Injection,简称DI)方式:setter注入和构造器注入。在Spring框架中,DI是一种核心特性,它允许我们解耦组件之间的关系...

    spring setter 和构造 注入 例子 spring 4.2.0

    DI主要有两种实现方式:setter注入和构造器注入。 首先,我们来理解setter注入。setter注入是通过Spring容器调用对象的setter方法来设置其依赖的对象。这种方式比较灵活,因为可以在运行时改变对象的依赖。例如,...

    Spring_0300_IOC_Injection_Type 构造器注入

    Spring支持多种类型的构造器注入,包括单一参数的构造器和多个参数的构造器。 1. 单一参数构造器注入 当只有一个参数时,Spring会自动匹配类型并调用相应的构造器。例如: ```java public class UserService { ...

    通过实例了解java spring使用构造器注入的原因

    通过实例了解 Java Spring 使用构造器注入的原因 通过实例了解 Java Spring 使用构造器注入的原因,主要介绍了 Spring 框架中的依赖注入机制,特别是构造器注入的方式。文章通过示例代码详细介绍了构造器注入的原理...

    Spring三种注入方式(三)

    本篇主要介绍Spring中的三种注入方式,包括构造器注入、设值注入和接口注入。 **一、构造器注入** 构造器注入是通过构造函数来传递依赖对象的一种方式。当类有多个构造函数时,Spring会使用带有最多参数的构造函数...

    Java开发学习(六)----DI依赖注入之setter及构造器注入解析.doc

    Spring 框架基于这些知识点,为我们提供了两种注入方式:setter 注入和构造器注入。 二、setter 注入 setter 注入是指通过 setter 方法将依赖对象注入到 Bean 中。例如,在 BookServiceImpl 中定义了引用类型属性 ...

    Spring三种注入方式(一)

    本篇主要介绍Spring中的三种注入方式,包括构造器注入、设值注入和接口注入。 首先,我们来看构造器注入。构造器注入是在创建对象时,通过构造器传递依赖对象。这种方式强制了对象在创建时就必须提供所有必要的依赖...

    spring依赖注入三种方式 测试源码

    1. **构造器注入** 构造器注入是通过构造函数来传递依赖对象的。当创建一个类的新实例时,Spring容器会调用带有所需参数的构造函数,从而完成依赖注入。这种方式确保了对象在创建时就已经具备了所有必要的依赖。...

    Spring注入的方式

    本文将详细探讨Spring中的两种主要注入方式:构造器注入和setter注入,以及它们各自的特点和适用场景。 首先,让我们理解什么是依赖注入(Dependency Injection,简称DI)。在传统的编程模式中,一个类通常会直接...

    SpringSet方法注入

    我们学习了spring框架spring框架里面有3个优势第一个是轻量级的IOC也叫控制反转后来改名为DI也叫依赖注入,依赖注入里面有3中注入方法分别是set注入,构造器注入,注解注入,我传的是set注入的视频

    Spring-MyBatis-Ajax重点详解

    Spring 构造器注入是 Spring 调用有参数构造器创建对象。使用构造器参数标签,实现构造器参数注入:&lt;constructor-arg&gt;&lt;/constructor-arg&gt;。 Spring 的 Bean 属性注入可以实现各种类型的数据注入,包括 String 类型...

    spring依赖注入

    在Spring中,依赖注入主要有三种方式:构造器注入、setter注入和接口注入。构造器注入是在对象实例化时通过构造函数传入依赖;setter注入则是通过调用对象的setter方法来设置依赖;接口注入则相对较少使用,它通过...

    spring依赖注入底层详解

    在Spring中,依赖注入可以通过构造器注入、设值注入和接口注入三种方式实现。 1. 构造器注入:通过在类的构造函数中传递依赖对象来完成注入。这种方式在创建对象时就确保了所有依赖都已就绪,适合于对象的依赖关系...

    Spring依赖注入的方式

    本文将深入探讨Spring中的依赖注入方式,包括构造器注入、设值注入和接口注入。 **一、构造器注入** 构造器注入是通过在类的构造函数中传入依赖对象来实现的。Spring容器在创建对象时,会调用带有相应依赖的构造...

    SpringIoc注入

    1. **构造器注入**:通过构造函数传递依赖对象,每个构造函数参数代表一个依赖。这种方式确保对象在创建时就具备了所有必需的依赖。 2. **setter注入**:通过setter方法来注入依赖。Spring容器调用带有@Autowired...

    Spring Ioc 注解 依赖注入

    1. **构造器注入**:通过类的构造方法来注入依赖项。 2. **设值注入**:通过setter方法来注入依赖项。 #### 四、使用注解进行依赖注入 随着Spring框架的发展,除了XML配置之外,Spring还引入了注解的方式来简化...

Global site tag (gtag.js) - Google Analytics