当前位置: 首页 > 知识库问答 >
问题:

如何将参数动态传递给春豆

段干长恨
2023-03-14

我不熟悉Spring。

这是bean注册的代码:

<bean id="user" class="User_Imple"> </bean>
<bean id="userdeff" class="User"> </bean>

这是我的豆子课:

public class User_Imple implements Master_interface {

    private int id;
    private User user; // here user is another class

    public User_Imple() {
        super();
    }

    public User_Imple(int id, User user) {
        super();
        this.id = id;
        this.user = user;
    }

    // some extra functions here....
}

这是我执行动作的主要方法:

public static void main(String arg[]) {

    ApplicationContext context = new ClassPathXmlApplicationContext("/bean.xml");
    Master_interface master = (Master_interface)context.getBean("user");

    // here is my some operations..
    int id = ...
    User user = ...

    // here is where i want to get a Spring bean
    User_Imple userImpl; //want Spring-managed bean created with above params
}

现在我想用参数调用这个构造函数,这些参数是在我的主要方法中动态生成的。这就是我想动态传递的意思——而不是静态传递,就像我的bean.config文件中声明的那样。

共有3个答案

岑鸣
2023-03-14

我认为上面提出的使用构造函数注入/setter注入的答案对于您正在寻找的用例并不完美。Spring或多或少地为构造函数/setter获取静态参数值。我看不出有什么方法可以动态传递值以从Spring容器中获取Bean。但是,如果您想动态获取User_Imple的实例,我建议使用工厂类User_Imple_Factory

 
    public class User_Imple_factory {
        private static ApplicationContext context =new ClassPathXmlApplicationContext("/bean.xml");

        public User_Imple createUserImple(int id) {
            User user = context.getBean("User");
            return new User_Imple(id, user);
        }
    }

赵高韵
2023-03-14

请看看构造函数注入。

另外,看看IntializingBean和BeanPostProcessor,了解springbean的其他生命周期截取。

卫飞
2023-03-14

如果我猜对了,那么正确的答案是使用 getBean(字符串 beanName, Object...args) 方法,它将参数传递给 bean。我可以向您展示如何完成基于 Java 的配置,但您必须了解如何针对基于 XML 的配置完成。

@Configuration
public class ApplicationConfiguration {
      
  @Bean
  @Scope("prototype")  // As we want to create several beans with different args, right?
  String hello(String name) {
    return "Hello, " + name;
  }
}

// and later in your application

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfiguration.class);
String helloCat = (String) context.getBean("hello", "Cat");
String helloDog = (String) context.getBean("hello", "Dog");

这就是你要找的吗?

这个答案得到了太多的支持,没人看我的评论。尽管它是问题的解决方案,但它被认为是Spring反模式,您不应该使用它!使用工厂、查找方法等,有几种不同的方法来做正确的事情。

请使用以下SO职位作为参考点:

  • 如何在运行时实例化Spring托管bean
 类似资料:
  • 问题内容: 我是Spring的新手。 这是bean注册的代码: 这是我的bean类: 这是我执行操作的主要方法: 现在,我想用参数调用此构造函数,并且这些参数是在我的主要方法中动态生成的。这就是我想动态传递- 而不是像文件中声明的那样静态传递的意思。 问题答案: 请看一下构造函数注入。 此外,请查看IntializingBean和BeanPostProcessor,以了解Springbean的其他

  • 问题内容: 我想将登录用户单击的sa 列表中的传递给twitter bootstrap 。我正在与 angularjs* 一起使用 grails ,其中数据是通过 angularjs 呈现的。 *** 组态 我的grails视图页面是 我的是 所以,我怎么能传递到? 问题答案: 我尝试如下。 我在 鼓励 按钮上打电话给angularjs控制器, 我设置的从angularjs控制器。 我提供了一个p

  • 问题内容: 我正在使用python flask框架。我编写了一个需要一个参数的装饰器,该参数是动态的。 我的装饰器如下所示,将获得一个密钥,并使用该密钥从redis获取数据。 而且我有一个使用这种装饰器的类,像这样的代码 如您所见,我的装饰器需要一个名为的参数,然后像这样传递密钥 将获得城市的ID,如果一切正常,密钥将如下所示 但我得到了错误: 我很困惑,在烧瓶中,如何将动态参数传递给装饰器? 谢

  • 问题内容: 我正在A中使用RUN指令安装rpm 但是,我想将值“ 2.3”作为参数传递。我的RUN指令应类似于: 哪里 问题答案: 您正在寻找和指导。这些是Docker 1.9中的新功能。查看https://docs.docker.com/engine/reference/builder/#arg。这将允许您添加到,然后使用构建。

  • 我试图通过动态输入要从中提取数据的工作表的名称,以这种方式重用现有的数据提供程序,将Excel文件中的数据加载到我的测试框架中。 示例:我正在从Login凭据表加载数据,该表代表成功登录测试的数据。第二个测试是失败的登录测试,它从InvalidLogin凭据表加载数据。第三个测试从第三个表UserInformation等中提取数据。我所遵循的udemy课程并没有真正涵盖这个主题,我觉得整个事情的实

  • 问题内容: 对于上面的动画CSS代码,我想知道是否有任何方法可以从Javascript 传递和作为参数传递。 问题答案: 使用CSS变量,您可以轻松地做到这一点: