【发布时间】:2015-03-04 04:49:42
【问题描述】:
我正在尝试在基于 Spring 的应用程序中打印私有和包作用域方法(来自包作用域类)的日志。由于 Spring 的基于代理的方面不适用于私有和包范围的方法(?),我尝试按照文档使用 AspectJ 加载时间编织。详情如下:
LoggingAspect
@Component(Constants.LOGGING_ASPECT_BEAN)
@Aspect
public class LoggingAspect {
@Around("@annotation(my.pkg.Loggable)")
public Object doLogging(final ProceedingJoinPoint joinPoint) throws Throwable {
// ... logging code.
}
}
弹簧配置
@Configuration
@EnableAspectJAutoProxy(proxyTargetClass = true)
@Import(AnotherBaseConfig.class)
@ComponentScan("my.pkg")
@EnableWebMvc
@EnableLoadTimeWeaving(aspectjWeaving = AspectJWeaving.AUTODETECT)
public class AppConfiguration extends WebMvcConfigurerAdapter {
// ... bean configs
}
src/main/webapp/META-INF/aop.xml
<aspectj>
<weaver>
<include within="my.pkg.*">
</weaver>
<aspects>
<aspect name="my.logger.LoggingAspect"/>
</aspects>
</aspectj>
JVM 配置
-javaagent:"/path/to/spring-instrument-4.0.6.jar" -javaagent:"/path/to/aspectjweaver-1.8.1.jar"
通过上述配置,我的包范围类为:
@Component("someClass")
class SomeClass {
@Loggable
void doSomething(@Loggable final String s, @Loggable final Integer i) {
// ... do something here.
}
}
编织不适用于此类包范围类。我做错了什么吗?
【问题讨论】:
-
春季团队的任何人都可以在这里帮助我吗?
标签: java spring aop aspectj spring-aop