Spring AOP autowired对象在运行时期间为空

时间:2018-06-13 18:06:49

标签: aspectj autowired spring-aop autoproxy

我正在尝试使用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。

0 个答案:

没有答案