zoukankan      html  css  js  c++  java
  • 如果有多个有参构造,Spring如何使用构造器注入

    狂神的Spring构造器注入看完了,但是如果有多个有参构造,Spring如何使用构造器注入这个情况还是没有提到,就自己测试了一番;

    测试的结果:
    默认会调用第一个有参构造器,如果需要调用第二个构造器需要个参数确定类型

    测试步骤

    1.创建一个多个参数构造器的pojo类

    package com.beans;
    public class Car {
    	   private String brand;
    	   private String corp;
           private double price;
           private int maxSpeed;
           
           public Car(String brand, String corp, double price) {
       		super();
       		this.brand = brand;
       		this.corp = corp;
       		this.price = price;
       	}
           
           public Car(String brand, String corp, int maxSpeed) {
       		super();
       		this.brand = brand;
       		this.corp = corp;
       		this.maxSpeed = maxSpeed;
       	}
    
           @Override
       	public String toString() {
       		return "Car [brand=" + brand + ", corp=" + corp + ", price=" + price + ", maxSpeed=" + maxSpeed + "]";
       	}
    }
    
    

    2.配置类

    代码如下(示例):

    <?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 
        class :bean 的全类名,通过反射的方式在IOC容器中创建bean,所以要求必须要有无参的构造器
        id: 表示容器中唯一的id
        -->
        
      
        <!--通过构造方法配置bean的属性 -->
        <bean id="car" class="com.beans.Car">
        <constructor-arg value="Audi" index="0"></constructor-arg>
        <constructor-arg value="ShangHai" index="1"></constructor-arg>
        <constructor-arg value="30000" index="2"></constructor-arg>
        
        </bean>
        
        <bean id="car2" class="com.beans.Car">
        <constructor-arg value="Boma"></constructor-arg>
        <constructor-arg value="ChangSha"></constructor-arg>
        <constructor-arg value="240"></constructor-arg>
        </bean>
        
        
    </beans>
    
    

    ####3.测试类

    package com.beans;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Main {
    
    	public static void main(String[] args) {
    		
    		
           //1.创建spring的IOC容器对象
    		//ApplicationContext 代表IOC容器 是 BeanFactory 接口的子接口
    		
    		// ClassPathXmlApplicationContext: 是 ApplicationContext的实现类,从类路径下来加载配置文件
            ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
            
            //2.从IOC容器中获取bean实例
            //利用id定位到IOC容器中的bean
        
            Car car=(Car)ctx.getBean("car");
            System.out.println(car);
            
            Car car2=(Car)ctx.getBean("car2");
            System.out.println(car2);
    	}
    
    }
    

    测试结果


    需要第二个有参构造则固定一个参数类型

     <bean id="car2" class="com.beans.Car">
        <constructor-arg value="Boma"></constructor-arg>
        <constructor-arg value="ChangSha"></constructor-arg>
        <constructor-arg value="240" type="int"></constructor-arg>
        </bean>
    


    1

  • 相关阅读:
    eclipse中创建完整的maven项目
    Nginx+tomcat配置集群负载均衡
    Git的安装与使用
    Angularjs checkbox的ng属性
    chrome渲染hover状态tranform相邻元素抖动bug
    nodejs创建express+ejs项目
    ubuntu常用命令
    ubuntu查看命令
    sublime text2卸载和重新安装
    fiddler代理
  • 原文地址:https://www.cnblogs.com/qxsong/p/14321070.html
Copyright © 2011-2022 走看看