Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Springbean在applicationContext.xml中的声明中可以是它自己的属性吗?_Java_Spring_Spring Mvc - Fatal编程技术网

Java Springbean在applicationContext.xml中的声明中可以是它自己的属性吗?

Java Springbean在applicationContext.xml中的声明中可以是它自己的属性吗?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我需要从ruberstampserviceinpl类内部调用ruberstampservice的公共方法 要从内部引用rubberStampService,我可以这样做一个自引用bean声明: <beans:bean id="rubberStampService" class="com.rubberly.RubberStampServiceImpl"> <beans:property name="rubberStampService" ref="rubberStampS

我需要从
ruberstampserviceinpl
类内部调用
ruberstampservice
的公共方法

要从内部引用
rubberStampService
,我可以这样做一个自引用bean声明:

<beans:bean id="rubberStampService" class="com.rubberly.RubberStampServiceImpl">
    <beans:property name="rubberStampService" ref="rubberStampService" />
</beans:bean>

听起来像是一个无限递归的、等待发生的内存不足错误。为什么不让服务调用自己的方法并使用它来完成呢?你不需要新的参考资料,只要“这个”


看不出这种方法有任何问题

Spring可以处理循环依赖(如果它们是可解析的,即如果不使用构造函数注入),包括自引用bean的情况。唯一的区别是,在循环依赖的情况下,bean在注入时可能没有完全初始化

当bean可以配置为使用不同的合作者时,它可能很有用,但在某些特定情况下,它需要使用自身

另请参见:


目的是什么?与bean相关的方面一起工作?注入原型(新实例)bean?或者只是调用自己的方法?你可能需要这个来利用代理enchancment,因为@Async你不必递归调用同一个方法,你可以调用其他方法…因为你有错误的假设-有时这不是正确的答案“有时”-所以可能是你在做假设。有时你会承认这是正确的。那么,为什么两年后的否决票?你没有更好的事要做吗?你的答案在哪里?换一个更好的,我们看看我是否会否决你的想法。我是在回答完全相同的问题。“Springbean是否可以在其声明中成为其自身的属性”这不是answear,希望您不会被-2点所触动。这可能不是解决方案的原因:您可能需要该方法的代理版本(例如
@Transactional
@Profiled
,等等)。这就是我发现这个问题时遇到的问题。或者,您可能会在注入不同bean的地方使用您的bean,或者在希望注入相同bean的地方使用您的bean。
public interface FooService()
{
    void foo();
    void bar();
}

public class FooServiceImpl implements FooService
{
    public void foo() { System.out.println("calling foo"); }
    public void bar()
    {
        this.foo(); // just call your own method.
    }
}