繁体   English   中英

Spring 将参数传递给构造函数 context.getBean

[英]Spring pass parameter to constructor context.getBean

我试图将构造函数参数动态传递给 Springboot 框架中的 bean。 我已经按照这个链接使用 context.getBean(class, arg...) 在 Spring 中动态传递构造函数参数,但它没有成功获取值并显示默认值。 我的代码有什么问题?

项目结构:

在此处输入图像描述

applicationContext.xml

    <?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-3.0.xsd">

    <bean id="opBean" class="com.testout.service.Operation">
        <constructor-arg name="param1" value="default1" />
        <constructor-arg name="param2" value="default2" />
    </bean>

</beans>

应用

import com.testout.service.Operation;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


@SpringBootApplication
public class Application implements CommandLineRunner {
    public static void main(String[] args)  {
        SpringApplication.run(Application.class, args);
    }
    @Override
    public void run(String... args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        String param1 = "newValue1";
        String param2 = "newValue2";
        Operation op = (Operation) context.getBean("opBean", param1, param2);
        op.printParams();
    }
}

手术

package com.testout.service;

public class Operation {
    private String param1;
    private String param2;

    public Operation(String param1, String param2){

        this.param1 = param1;
        this.param2 = param2;
        System.out.println("param1: " + param1 + ", param2: " + param2);
    }
    public void printParams(){

        System.out.println(this.param1);
        System.out.println(this.param2);
    }
}

output:

2021-02-19 16:45:58.201  INFO 43664 --- [           main] com.testout.controller.Application       : No active profile set, falling back to default profiles: default
2021-02-19 16:45:59.097  INFO 43664 --- [           main] com.testout.controller.Application       : Started Application in 1.494 seconds (JVM running for 2.074)
param1: default1, param2: default2
default1
default2

如果你想要这种行为,你必须将你的 bean 的scope设置为prototype

<bean id="opBean" class="com.testout.service.Operation" scope="prototype"/> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM