springBoot Aop可以切controller切不到service

问题描述
最近在做一个springboot的项目中使用aop做全局日志管理
但是出现了这样的问题controller包下的类都正常的切到了,但是service层怎么也没反应
问题出现的环境背景及自己尝试过哪些方法
@EnableAspectJAutoProxy没用
srping.aop.proxy-target-class=true/
相关代码
//请把代码文本粘贴到下方(请勿用图片代替代码)
@ControllerpublicclassOCheckassoInfoControllerextendsBaseController{
@Autowired
@Resource(name="error_log")
Loggererror_log;
@Autowired
OCheckassoInfoInfoServiceOCheckassoInfoInfoService;
@PostMapping(value="/oCheckassoInfo/queryData")
@ResponseBody
publicMapqueryData(){
HashMapresult=newHashMap();
try{
result.put("status",EnuConfig.REQUEST_SUCCESS);
result.put("data",OCheckassoInfoInfoService.queryDataAll(this.getHashDataEntity()));
returnresult;
}catch(Exceptione){
error_log.info(e.getMessage());
e.printStackTrace();
result.put("status",EnuConfig.REQUEST_FAIL);
result.put("data","系统错误");
returnresult;
}
}
}
切面类@Aspect@ComponentpublicclassLogAop{
publicLoggerservice_log=LogManager.getLogger("service");
@Pointcut("execution(public*com.solantec.sensitive_fraud_yinlian.*.*.*.*())")
privatevoidaspect(){}
@Before(value="aspect()")
publicvoidmethodBefore(JoinPointjoinPoint){
ServletRequestAttributesrequestAttributes=(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequestrequest;
service_log.info("===============requestcontext===============");
if(requestAttributes!=null){
request=requestAttributes.getRequest();
service_log.info("requestaddr:"+request.getRequestURL().toString());
service_log.info("requestmethod:"+request.getMethod());
}
service_log.info("params:"+Arrays.toString(joinPoint.getArgs()));
service_log.info("targetmethod:"+joinPoint.getSignature());
service_log.info("===============requestcontext===============");
}
@AfterReturning(returning="o",pointcut="aspect()")
publicvoidmethodAfterReturing(Objecto){
service_log.info("****************************result****************************");
service_log.info("result:"+o);
service_log.info("****************************result****************************");
}
}
你期待的结果是什么?实际看到的错误信息又是什么?
正常情况下控制台应该会打印两个===============requestcontext===============一个时controller的一个是service的但是service的死活就是没有
慕容森
浏览 961回答 2
2回答

SMILET

觉得是Pointcut表达式的问题,你可以看下Spring的Pointcut表达式问题,如果你service是基于接口变成,那你的表达式应该是没有扫描到子子包的内容,controller那边如果也有子包的话,子包下面应该也不会aop到的。如下两个表达式的区别定义在service包里的任意方法的执行:execution(com.xyz.service..*(..))定义在service包和所有子包里的任意类的任意方法的执行:execution(com.xyz.service...*(..))

米琪卡哇伊

建议:一、把日志调为debug,看详细日志,注意观察方法嵌套调用时,内部方法是否开启代理;二、可以先把controller排除掉,让aspectj表达式直接匹配service层,可以观察是否命中service层;注意,如果你使用了aop的starter并在方法入口使用@SpringBootApplication,aop会自动开启并配置的,不用使用enable注解
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript