在弹簧应用中加载非弹簧豆的时间

时间:2016-12-29 16:53:24

标签: spring aspectj spring-aop load-time-weaving spring-aspects

我有一个带有一些REST控制器,服务类和帮助程序类的spring启动应用程序。控制器和服务类是弹簧管理的,而辅助类不是弹簧管理的,主要包含静态方法。

AspectJ配置在java配置中出现如下

@Configuration
@EnableLoadTimeWeaving(aspectjWeaving = AspectJWeaving.ENABLED)
public class AspectConfig {

    @Bean
    public LoggingAspect loggingAspect() {
        return new LoggingAspect();
    }
}

相应的LoggingAspect类如下,

@Aspect
public class LoggingAspect {

    @Before("allMethodsPointcut()")
    public void logBeforeMethod(JoinPoint joinPoint) {
        System.out.println("Entering Method - " + joinPoint.getSignature().getDeclaringType() + "::" + joinPoint.getSignature().getName());
    }

    @After("allMethodsPointcut()")
    public void logAfterMethod(JoinPoint joinPoint) {
        System.out.println("Exiting Method - " + joinPoint.getSignature().getDeclaringType() + "::" + joinPoint.getSignature().getName());
    }

    @Pointcut("execution(* com.test.controller..*(..)) || execution(* com.test.service..*(..)) || execution(* com.test.helper..*(..))")
    public void allMethodsPointcut() {
    }
}
  • 调用控制器时,启用Aspect的日志记录适用于控制器和服务功能,但不适用于帮助程序功能。
  • 如果我们在控制器中自动装配辅助类,则非静态辅助方法开始显示aspectj日志。但是,静态帮助程序方法仍然不显示aspectj logs

问题, 1.我们如何为不是Spring管理的类配置aspectj建议,即没有@Bean,@ Autowired,@ Component等。 2.我们如何为静态方法配置aspectj建议(我正在使用@EnableLoadTimeWeaving但是我可能缺少一些东西) 3.如果可能,AspectJ配置应该基于java

如果需要更多详细信息,请告诉我

1 个答案:

答案 0 :(得分:3)

使用-javaagent:/path/to/aspectjweaver-<version>.jar作为JVM的启动参数以启用加载时编织。从弹簧配置中删除@EnableAspectJAutoProxy,以便spring不会尝试使用它自己的Spring AOP框架而不是纯粹的AspectJ。 (可选)创建META-INF/aop.xml。如果要将spring配置应用于不受spring(@EnableSpringConfigured POJO)管理的bean,请添加@Configurable