0

私はWebアプリにSpringAOPを実装しようとしていました。残念ながら、Webで見つけたサンプルコードはすべてコンソールアプリです。手がかりが足りなくなっていたのですが、どうすればWebアプリでそれを行うことができますか?

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>

これで、Webアプリケーションが起動すると、<context-param>contextConfigLocationで宣言されたコンテキストがロードされます。あなたの場合は「/WEB-INF/applicationContext.xml」です。

特定のクラスでコンテキストが必要な場合は、ApplicationContextAwareそれを取得するためのインターフェースを実装できます。

残りの部分については、Webアプリケーションは基本的なSpringアプリケーションになり、通常どおりにクラスを配線できます。

于 2012-06-08T10:53:33.330 に答える
0

手がかりを与えてくれた@DaveNewtonに感謝します。私がウェブから注入するために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 に答える