我正在尝试使用AOP打印项目中所有方法的入口和出口日志。启用AOP后,少数类中的@Autowired bean为null,从而导致NullPointerException。
AOPConfig
@Aspect
@Configuration
public class SpringAOPConfig {
@Before("execution(* org.abc..*(..)) && !execution(* org.abc.dao..*(..)) && !execution(* org.abc.delegete.dto..*(..))")
public void logMethodEntry(JoinPoint joinPoint) {
//entry logger
}
@After("execution(* org.abc..*(..)) && !execution(* org.abc.dao..*(..)) && !execution(* org.abc.delegete.dto..*(..))")
public void logMethodExit(JoinPoint joinPoint) {
// exit logger
}
}
Spring配置
@Configuration
@EnableWebMvc
@EnableAsync
@ComponentScan({"org.abc.*"})
@PropertySource("classpath:application.properties")
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class SpringConfig implements WebMvcConfigurer,ApplicationContextAware {
....
}
控制器
package org.abc.web.controller.producer;
@RestController
@RequestMapping(value = "/api/v1/producer/admin")
public class ABCRestController {
@Autowired
ServiceMapper serviceMapper;
....
....
}
这里我发现serviceMapper为null。该对象在没有AOP的情况下进行自动连接。 我尝试使用setter方法进行自动连接,我可以在初始化期间将CGLIB代理对象分配给变量,但在运行时,变量变为null,而不会在中间调用setter。