0

我试图在 web 应用程序中实现 Spring AOP。不幸的是,我在网上找到的所有示例代码都是控制台应用程序。我不知道如何在网络应用程序中做到这一点?

在 web.xml 文件中,我像这样加载 applicationContext.xml:

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>

在 applicationContext.xml 文件中,我将 ProxyFactoryBean 定义如下:

<bean id="theBo" class="my.package.TheBo">
  ...
</bean>    
<bean id="theProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
      <property name="proxyInterfaces">
        <list>
            <value>my.package.ITheBo</value>
        </list>
    </property>
    <property name="target" ref="theBo"/>
    <property name="interceptorNames">
        <list>
            <value>loggingBeforeAdvice</value>
        </list>
    </property>
</bean>

我现在的情况是我不知道放置此代码的最佳位置在哪里:

ApplicationContext context = new ClassPathXmlApplicationContext("WEB-INF/applicationContext.xml");
theBo = (ITheBo) context.getBean("theProxy");

如果这是一个控制台应用程序,我宁愿把它放在 main() 中,但我怎么能在 web 应用程序中这样做呢?

4

2 回答 2

3

您不需要以下代码来加载上下文:

ApplicationContext context = new ClassPathXmlApplicationContext("WEBINF/applicationContext.xml");
theBo = (ITheBo) context.getBean("theProxy");

您必须将其添加ContextLoaderListener到您的web.xml文件中:

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>现在,当您的 Web 应用程序启动时,会加载 contextConfigLocation中声明的上下文。在你的情况下'/WEB-INF/applicationContext.xml'。

如果您需要特定类中的上下文,您可以实现ApplicationContextAware接口来检索它。

剩下的,你的 webapp 现在是一个基本的 spring 应用程序,你可以像往常一样连接你的类。

于 2012-06-08T10:53:33.330 回答
0

感谢@Dave Newton 给了我线索。为了让我theProxy从网络注入,就我而言,它是 JSF,我必须将以下代码放入faces-config.xml.

<application>
   <variable-resolver>
      org.springframework.web.jsf.DelegatingVariableResolver
   </variable-resolver>
</application>

<managed-bean>
   <managed-bean-name>theAction</managed-bean-name>
   <managed-bean-class>org.huahsin68.theAction</managed-bean-class>
      <managed-bean-scope>session</managed-bean-scope>
      <managed-property>
         <property-name>theBo</property-name>
            <value>#{theProxy}</value>
      </managed-property>
</managed-bean>

并将@tom 提供的侦听器放入web.xml.

于 2012-06-20T09:51:08.750 回答