“此”在Spring XML中引用applicationcontext

时间:2011-10-25 16:38:59

标签: java spring

有没有办法在Spring中的bean配置文件中引用当前的应用程序上下文?

我正在尝试做这样的事情:

<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">

    <bean id="some-bean-name" class="com.company.SomeClass">
        <constructor-arg>
            <!-- obviously this isn't right -->
            <bean ref=#{this}/>
        </constructor-arg>
    </bean>

问题是SomeClass在其构造函数中需要一个ApplicationContext实例。有没有办法获得正在加载bean的ApplicationContext的引用?我知道我可以在XML中完成所有的加载,但这不是我想要的,因为我需要在我的java代码中进行bean加载。

1 个答案:

答案 0 :(得分:1)

您是否考虑过实施ApplicationContextAware?它不会在构造函数中出现,但它确实在init()调用之前发生,并且会在填充bean属性之后发生。

  

在普通bean属性的填充之后但在init之前调用   回调,如InitializingBean.afterPropertiesSet()或自定义   初始化方法。之后调用   ResourceLoaderAware.setResourceLoader(org.springframework.core.io.ResourceLoader)   ApplicationEventPublisherAware.setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher)   和MessageSourceAware,如果适用的话。

public class SomeClass implements ApplicationContextAware {
    //your class definition
    private ApplicationContext myContext;

    public void setApplicationContext(ApplicationContext context) throws BeansException {
        myContext = context;
        //load beans here maybe?
    }
}

如果使用Spring 2.5或更高版本,您也可以@Autowire(d)

public class SomeClass {
    //your class definition
    @Autowired
    private ApplicationContext myContext;
}

当然,执行其中任何一项操作都会将代码绑定到Spring。