弹簧&x27;s加载时间编织的spring托管bean,是否存在冲突?
我的项目已经使用弹簧&x27;s加载时间编织的spring托管bean,是否存在冲突?,spring,aop,aspectj,spring-aop,Spring,Aop,Aspectj,Spring Aop,我的项目已经使用 我的LTW配置似乎是正确的,因为我已经打开了verbose和debug weaver选项,我在catalina.out中看到了类似的行 2013-11-28 13:17:57,167+0000 [INFO ] org.springframework.context.weaving.DefaultContext LoadTimeWeaver [main] - Using a reflective load-time weaver for class loader: org.spr
我的LTW配置似乎是正确的,因为我已经打开了verbose和debug weaver选项,我在catalina.out中看到了类似的行
2013-11-28 13:17:57,167+0000 [INFO ] org.springframework.context.weaving.DefaultContext LoadTimeWeaver [main] - Using a reflective load-time weaver for class loader: org.springframework.instrument.classloading.tomcat .TomcatInstrumentableClassLoader
[TomcatInstrumentableClassLoader@53ea0105] info register aspect com.anon.profiling.aspect.MyAspect
...
[TomcatInstrumentableClassLoader@273d1402] debug not weaving 'org.quartz.SimpleTrigger'
[TomcatInstrumentableClassLoader@273d1402] debug not weaving 'org.apache.http.conn.scheme.SocketFactory'
...
我想要插入的类与其他几个类在一个包中,我可以看到该包中的其他类正在以与未编织的相同的方式进行调试。但是大约有一半的课程(包括我感兴趣的课程)根本没有被提及——要么是因为没有被编织,要么被忽略,要么是因为其他原因。稍微深入一点,我想我发现了一种被忽略的类由Spring管理的模式:要么在applicationContext.xml中声明,要么用@Inject注入到另一个类中
是不是TomcatInstrumentableClassLoader不会加载spring管理的bean进行编织?我需要在配置中添加一些东西来启用它吗
--雷切尔
编辑:响应@gadget
aop.xml
<aspectj>
<!-- "includes" required in order to use both Spring AOP as well as AspectJ Load Time Weaving where Proxied classes are not possible eg. MarkLogicClient -->
<weaver options="-verbose -showWeaveInfo -Xset:weaveJavaxPackages=true">
<!-- only weave classes in the following packages -->
<include within="mycompany..*"/>
<include within="javax.*"/>
</weaver>
</aspectj>
applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<context:component-scan base-package="mycompany.appname"/>
<context:annotation-config/>
<aop:aspectj-autoproxy proxy-target-class="true"/>
<context:load-time-weaver/>
<!-- bean declarations normally here, removed for brevity -->
</beans>
xml(抱歉,它有点长,但我不想删除任何内容,以防它很重要)
appname
log4jConfigLocation
类路径:log4j.properties
服务状态
org.springframework.web.servlet.DispatcherServlet
4.
org.springframework.web.context.ContextLoaderListener
上下文配置位置
类路径:spring/*.xml
泽西servlet
com.sun.jersey.spi.spring.container.servlet.SpringServlet
com.sun.jersey.api.json.POJOMappingFeature
真的
com.sun.jersey.spi.container.ResourceFilters
mycompany.appname.security.ResourceFilterFactory
com.sun.jersey.config.property.WadlGeneratorConfig
mycompany.appname.jersey.Isite2WadlGeneratorConfig
1.
泽西servlet
/*
服务状态
/服务状态
WebApprotKey
登录中
属性配置
类路径:spring/propertiesConfigContext.xml
utf8ValidatingFilter
mycompany.appname.filter.Utf8ValidatingFilter
utf8ValidatingFilter
/*
定时滤波器
mycompany.appname.filter.timeingfilter
定时滤波器
/*
mycompany.appname.log.EnvironmentalPropertiesLog4jContextListener
很可能您正在使用多个Spring上下文和不同的类加载器,并且尚未在所有这些类加载器上设置weaver代理。您可以发布您的xml配置,或者描述层次结构吗?如果可以添加aop.xml和applicationContext.xml,您还需要查看其他内容吗?web.xml、pom.xml?aop.xml和applicationContext.xml将非常有用,而web.xml只是为了查看如何加载context@gadget:也添加了web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>appname</display-name>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<servlet>
<servlet-name>servicestatus</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>4</load-on-startup>
</servlet>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/*.xml</param-value>
</context-param>
<servlet>
<servlet-name>jersey-servlet</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ResourceFilters</param-name>
<param-value>mycompany.appname.security.ResourceFilterFactory</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.property.WadlGeneratorConfig</param-name>
<param-value>mycompany.appname.jersey.Isite2WadlGeneratorConfig</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>servicestatus</servlet-name>
<url-pattern>/servicestatus</url-pattern>
</servlet-mapping>
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>logging</param-value>
</context-param>
<context-param>
<param-name>propertiesConfigLocation</param-name>
<param-value>classpath:spring/propertiesConfigContext.xml</param-value>
</context-param>
<filter>
<filter-name>utf8ValidatingFilter</filter-name>
<filter-class>mycompany.appname.filter.Utf8ValidatingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>utf8ValidatingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>timingFilter</filter-name>
<filter-class>mycompany.appname.filter.TimingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>timingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>mycompany.appname.log.EnvironmentalPropertiesLog4jContextListener</listener-class>
</listener>
</web-app>