方面不适用于带有外部jar的Spring启动应用程序
我正在尝试创建一个计时器方面来测量方法运行时间。
我创建了一个名为:@Timer
@Retention(RetentionPolicy.RUNTIME)
@Target(value = {ElementType.METHOD, ElementType.TYPE})
public @interface Timer {
String value();
}
然后我创建了如下方面:
@Aspect
public class MetricAspect {
@Autowired
private MetricsFactory metricsFactory;
@Pointcut("@annotation(my.package.Timer)")
public void timerPointcut() {}
@Around("timerPointcut() ")
public Object measure(ProceedingJoinPoint joinPoint) throws Throwable {
/* Aspect logic here */
}
private Timer getClassAnnotation(MethodSignature methodSignature) {
Timer annotation;
Class<?> clazz = methodSignature.getDeclaringType();
annotation = clazz.getAnnotation(Timer.class);
return annotation;
}
我有一个配置类,如下所示:
@Configuration
@EnableAspectJAutoProxy
public class MetricsConfiguration {
@Bean
public MetricAspect notifyAspect() {
return new MetricAspect();
}
}
到目前为止的所有内容都在一个打包的jar中定义,我将其用作春季启动应用程序中的依赖项
在我的 spring boot 应用程序中,我导入了 ,并调试了代码,并看到 Bean 已创建。MetricsConfiguration
MetricAspect
我在代码中使用它,如下所示:
@Service
public class MyService {
...
@Timer("mymetric")
public void foo() {
// Some code here...
}
...
}
但是我的代码没有达到该方法。不知道我错过了什么。measure
为了完成图片,我在pom文件中添加了这些依赖项:
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.4</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.4</version>
</dependency>
</dependencies>
这是导入的类:@Configuration
MetricsConfiguration
@Configuration
@EnableAspectJAutoProxy
@Import(MetricsConfiguration.class)
@PropertySource("classpath:application.properties")
public class ApplicationConfiguration {
}
它加载了Spring的自动配置加载。