私の web.xml ファイルには次のものがあります。
<!-- Creates the Spring Container shared by all Servlets and Filters --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
contextConfigLocation クラスパス:shared-context.xml
<!-- Main general mapping, i.e. context for the UI & version queries --> <servlet> <servlet-name>mainDispacherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:web-application-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mainDispacherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- Processes application requests for version 1 --> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:version-api-contexts/application-context[v1.0].xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/api/v1.0/*</url-pattern> </servlet-mapping>
親コンテキストではshared-context.xml
、次のものがあります。
<aop:aspectj-autoproxy/>
<context:component-scan base-package="com.company.cse.support.audit"/>
パッケージcom.company.cse.support.audit
には、@Component および @Aspect でマークされたクラスが含まれています。この側面は、私の監査ログにメッセージを記録します。
子コンテキストで定義された Bean でメソッドを呼び出すと、version-api-contexts/application-context[v1.0].xml
Bean は Spring AOP によってプロキシされず、アスペクトは呼び出されません。アスペクト定義行<context:component-scan base-package="com.company.cse.support.audit"/>
を子コンテキスト XML に移動すると、アスペクトは正常に機能します。
最終的には多くの子コンテキストを持つことになるため、子 XML ファイルのそれぞれにこの行を入れる必要はありません。親コンテキストで一度共通の側面を定義し、それらを子コンテキストで機能させる方法はありますか?