【问题标题】:How to invoke a bean method in Apache Blueprint?如何在 Apache Blueprint 中调用 bean 方法?
【发布时间】:2015-06-29 19:31:00
【问题描述】:

我有以下 java 类

public class SecondClass
{
    //...
}

public class MyClass
{
    public void doSomething(SecondClass secondClass)
    {
        //...
    }
}

在蓝图中我有如下内容

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">

    <bean id="secondClass" class="foo.bar.SecondClass" />

    <bean id="myClass" class="foo.bar.MyClass" />

    <!-- How do I invoke myClass.doSomething(secondClass) ??? -->

</blueprint>

有人知道如何从蓝图中调用 myClass.doSomething(secondClass) 吗?

【问题讨论】:

  • 蓝图用于依赖注入,而不是用于执行代码,所以我不太明白从蓝图中调用 myClass.doSomething 方法的意思。您能否澄清一下您要做什么?
  • 感谢您的评论。我知道这并不常见,而且违背了 IoC 的理念。但是,我想要像 Spring 那样由 MethodInvokingFactoryBean 完成。我想我可以实现它。

标签: java osgi blueprint-osgi


【解决方案1】:

如果我理解正确(我自己对 MethodInvokingFactoryBean 不是很熟悉)你需要的是一个工厂方法,即。类似于以下内容:

   <bean id="myClass" class="foo.bar.MyClass" 
         factory-method="doSomething">   
       <argument ref="secondClass"/>    
   </bean>

您可以找到更多关于如何使用带有蓝图in this guide(IMO 最有用的蓝图资源之一)的工厂的详细信息

【讨论】:

  • 我在想这样的事情,但我担心工厂方法 doSomething() 应该是静态的,不应该吗?
  • 是的,应该。或者您可以查看我给您的链接中的实例工厂方法是否更接近您的需求,
  • 在链接中它实际上可以按我的要求工作。即使不是静态的,实例工厂方法也会在您指定的实例上调用该方法
猜你喜欢
  • 2016-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多