是否可以将Spring AOP应用于在不同于AOP配置的应用程序上下文中声明的bean?我有2个应用程序上下文: dataApplicationContext.xml 和 webApplicationContext.xml 。我想在 webApplicationContext.xml 中声明一个方面来拦截 dataApplicationContext.xml 中定义的bean的方法执行
dataApplicationContext.xml 包含在主{em> applicationContext.xml 上下文文件中,该文件从main(String args[])
入口点启动。 webApplicationContext.xml 由ContextLoaderListener
逐个加载,部署在Jetty的嵌入式实例中。
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext( new String[] { "applicationContext.xml"} );
ctx.registerShutdownHook();
Server server = ctx.getBean(Server.class);
DispatcherServlet dispatcherServlet = new DispatcherServlet();
dispatcherServlet.setContextConfigLocation("classpath:webApplicationContext.xml");
ServletHolder servletHolder = new ServletHolder(dispatcherServlet);
ServletContextHandler context = new ServletContextHandler();
context.setContextPath("/");
context.addEventListener(new ContextLoaderListener());
context.setInitParameter("contextConfigLocation",
"classpath*:**/webApplicationContext.xml");
context.addServlet(servletHolder, "/*");
context.setSessionHandler(new SessionHandler());
感谢。
答案 0 :(得分:1)
如果你的spring应用程序加载了两个上下文文件,它应该是开箱即用的。如果没有,您有两个选择:
答案 1 :(得分:0)
如果使用dataApplicationContext.xml
加载了org.springframework.web.context.ContextLoaderListener
,您肯定可以这样做
和你的
使用webApplicationContext.xml
DispatcherServlet
原因是,默认情况下,Spring容器会创建两个上下文。
root application context
和每个Dispatched Servlet都有自己的web application context
。
Spring文档明确提到了这个
详见第3.8节“The ApplicationContext“,Spring中的ApplicationContext实例可以 作用域。在Web MVC框架中,每个DispatcherServlet都有自己的 WebApplicationContext,它继承了已定义的所有bean 根WebApplicationContext。这些继承的bean定义可以 在特定于servlet的范围中重写,以及新的特定于范围的bean 可以在给定的servlet实例的本地定义。
因此,调度程序servlet的root application context
webapplication context
中指定的bean定义
在您的情况下,如果第一行为true,您可以从webApplicationContext.xml
访问AOP声明,因为这是您的Web上下文,它可以访问根上下文。