在spring上下文初始化之前运行代码

在spring上下文初始化之前运行代码,spring,tomcat,web-applications,web.xml,Spring,Tomcat,Web Applications,Web.xml,在tomcat 7上运行web应用程序时,我的部署描述符包含两个侦听器,一个是我创建的自定义侦听器,另一个是Spring: <listener> <listener-class>com.company.appName.web.context.MyContextListener</listener-class> </listener> <!-- Creates the Spring Container shared by all Se

在tomcat 7上运行web应用程序时,我的部署描述符包含两个侦听器,一个是我创建的自定义侦听器,另一个是Spring:

<listener>
    <listener-class>com.company.appName.web.context.MyContextListener</listener-class>
</listener>

<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
因此web.xml从未实际使用过

在这种情况下,总是首先调用spring上下文,在初始化它之前我没有机会做任何事情-是这样吗?有没有办法在spring的上下文之前运行一些代码

更新: 我还想提到,我正在测试套件中使用@BeforeClass注释:

@RunWith(Categories.class)
@IncludeCategory(HttpTest.class)
@SuiteClasses({ <MY TEST CLASSES> })
public class HttpSuiteITCase {

    /**
     * Run once before any of the test methods.
     */
    @BeforeClass
    public static void setTestsConfigurations() {
    TestConfiguration.setup(false);
    }
}
@RunWith(Categories.class)
@IncludeCategory(HttpTest.class)
@SuiteClasses({})
公共级高温超导手提箱{
/**
*在任何测试方法之前运行一次。
*/
@课前
公共静态void setTestsConfigurations(){
TestConfiguration.setup(false);
}
}
使用这种方法并不能解决这个问题,测试类和我所有的Springbean首先被初始化


提前感谢

在测试类中用注释一个
静态
方法,并在那里进行初始化。例如:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:testApplicationContext.xml" })
public class TestTest {

    @BeforeClass
    static public void beforeClass() {
        // do intialization here
    }

如果初始化代码需要访问类字段,因此不能是
静态的
,则可以设置并实现
beforeTestClass()
。有关示例,请参见

您可以在测试上下文中,在bean中使用init方法

<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init"/>

}

好的,很有趣。但谁能保证在我所有的SpringBean中,这个bean首先得到初始化呢?因为你必须在spring和SpringBean生命周期中经历初始化回调。为了保证您可以自己试一试。我昨天确实试过了,但由于某种原因它不起作用(我尝试从我的套件中运行@BeforeClass方法,所以它只能运行一次。今天它起作用了……我昨天太困了:)
<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init"/>
public void init() {
    // do some initialization work
}