Spring装配对象方法-构造方法

Spring装配对象方法

Spring通过XML使用构造方法为对象装配属性。

通过参数顺序

通过参数类型

通过参数顺序和类型

beans.xml

xml 复制代码
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="userinfo" class="com.hk.hr.UserInfo">
        <constructor-arg index="0" type="java.lang.String">
            <value>Java</value>
        </constructor-arg>
        <constructor-arg index="1" type="java.lang.String">
            <value>Oracle</value>
        </constructor-arg>
        <constructor-arg index="2" type="java.lang.Integer">
            <value>30</value>
        </constructor-arg>
        <property name="id" value="user"/>
        <property name="name" value="java"/>
    </bean>
    <bean name="orginfo" class="com.hk.hr.OrgInfo" p:name="oracle" p:mgr-ref="userinfo">
    </bean>
    <bean name="orginfo2" class="com.hk.hr.OrgInfo" p:name="oracle" p:mgr-ref="userinfo">
        <property name="users">
            <list>
                <value>Java</value>
                <value>Python</value>
                <ref bean="userinfo"/>
            </list>
        </property>
        <property name="roles">
            <list>
                <value>管理员</value>
                <value>浏览者</value>
                <ref bean="userinfo"/>
            </list>
        </property>
        <property name="maps">
            <map>
                <entry key="key01" value="Java"/>
                <entry key="key02" value="Android"/>
            </map>
        </property>
        <property name="prop">
            <props>
                <prop key="key01">Value1</prop>
                <prop key="key02">Value2</prop>
            </props>
        </property>
    </bean>
</beans>

UserInfo.java

java 复制代码
package com.hk.hr;

public class UserInfo {
    private String id = null;
    private String name = null;
    private Integer age = null;

    /**
     public UserInfo()
     {
     System.out.println("UserInfo()");
     }
     */

    public UserInfo(String id,String name)
    {
        this.id = id;
        this.name = name;
        System.out.println("UserInfo1:id="+id+",name="+name);
    }

    public UserInfo(String id,String name,Integer age)
    {
        this.id = id;
        this.name = name;
        this.age = age;
        System.out.println("UserInfo2:id="+id+",name="+name+",age="+age);
    }

    public UserInfo(String id,String name,String age)
    {
        this.id = id;
        this.name = name;
        this.age = Integer.parseInt(age);
        System.out.println("UserInfo3:id="+id+",name="+name+",age="+age);
    }

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

Main.java

java 复制代码
package com.hk.hr;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
    public static void main(String[] args)
    {
        ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
        UserInfo ui = (UserInfo)ac.getBean("userinfo");
        System.out.println("ui2="+ui);
        OrgInfo oi = (OrgInfo)ac.getBean("orginfo");
        System.out.println("oi="+oi);
        OrgInfo oi2 = (OrgInfo)ac.getBean("orginfo2");
        System.out.println("oi2="+oi2);
    }
}



为了避免Spring调用构造方法出现混淆,使用参数顺序和参数类型限定构造方法

相关推荐
txxzjmzlh8 小时前
Java 线程的几种状态
java·开发语言
椰羊~王小美8 小时前
主流编程语言及工具的典型应用场景总结
java
妙蛙种子3118 小时前
【Java设计模式 | 创建者模式】建造者模式
java·开发语言·后端·设计模式·建造者模式
knowwen8 小时前
2026年4月13日 Java笔试题
java·开发语言
环流_8 小时前
多线程2(Java线程的状态)
java·开发语言
zihao_tom8 小时前
Spring 简介
java·后端·spring
givemeacar8 小时前
spring session、spring security和redis整合的简单使用
redis·spring·bootstrap
Java女侠_9年实战8 小时前
Spring框架“惯性思维”坑——@Transactional失效场景、Bean注入循环依赖
后端
C雨后彩虹8 小时前
Java Lambda & Stream 避坑指南:20个高频错误案例分析与修复
java·stream·lambda·并行流
环流_8 小时前
多线程3(线程安全问题及解决方案)
java·开发语言