• 如果有多个有参构造,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

  • 相关阅读:
    设计模式--17、建造者模式
    设计模式--16、原型模式
    面向对象的几大设计原则
    设计模式--15、模板方法模式
    设计模式--14、中介者模式
    设计模式--13、享元模式
    设计模式--12、外观模式
    设计模式--11、命令模式
    消息中间件ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ、Kafka如何选型?
    Kafka,Mq,Redis作为消息队列有何差异?
  • 原文地址:https://www.cnblogs.com/qxsong/p/14321070.html
Copyright © 2020-2023  润新知