Spring aop @aspect无法执行切入方法

aihu0307 2015-06-06 05:33:53
今天在用@aspect的时候碰到一个问题,代码如下:
先定义一个@aspect的方法

package com.hexin.pettyLoan.common.aop;

import java.util.Date;

import javax.annotation.Resource;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;


import com.hexin.core.annotation.AnnotationUtil;
import com.hexin.core.annotation.RedisRead;
import com.hexin.core.util.JSONUtil;
import com.hexin.core.util.cache.ShardedRedisUtil;


@Component
@Aspect
public class AspectJRedisRead {
@Pointcut("execution(* com.hexin.pettyLoan.*.service.impl.*.*(..))")
private void pointCut(){}
public AspectJRedisRead(){
System.out.println("aaaaaa");
}
// @Resource(name="shardedRedisUtil")
// ShardedRedisUtil redisUtil;

@Before("pointCut()") //spring中Before通知
public void readBefore() {
System.out.println("readBefore:现在时间是:"+new Date());
}

@After("pointCut()") //spring中After通知
public void readAfter() {
System.out.println("readAfter:现在时间是:"+new Date());
}
@AfterReturning("pointCut()")
public void readAfterReturning(){
System.out.println("readAfterReturning:现在时间是:"+new Date());
}
@AfterThrowing("pointCut()")
public void readAfterThrowing(){
System.out.println("readAfterThrowing:现在时间是:"+new Date());
}

@Around("pointCut()") //spring中Around通知
public Object readAround(ProceedingJoinPoint joinPoint) {
Object result = null;
try {
System.out.println("readAround开始:现在时间是:"+new Date());
result = joinPoint.proceed(joinPoint.getArgs());
System.out.println("readAround结束:现在时间是:"+new Date());
} catch (Throwable e) {
e.printStackTrace();
}
return result;
}
}


配置文件已加入aspectj-autoproxy 如下:

<context:annotation-config></context:annotation-config>
<!-- 启用aop -->
<aop:aspectj-autoproxy proxy-target-class="true" />

service实现类

@Service("flexkeyService")
public class FlexkeyServiceImpl implements FlexkeyService {
@Override
public String redisTest(Integer id){
return "this is from function";
}
}

controller调用

@RequestMapping("/redistest.do")
public @ResponseBody String redistest(String callback){
JsonResult result = new JsonResult();
try{
result = new JsonResult(1, null, flexkeyService.redisTest(1));
}
catch(ErrorCodeException ex){
result = new JsonResult(-1, ex.toMessage(), null);
logger.error(ex.toMessage(), ex);
}
String json =JSONUtil.toJsonpString(result, callback);
return json;
}


但是,在执行了redisTest方法的时候,它并没有去执行@After,@Around等对应的方法
请大神帮忙查查,是什么原因?
...全文
21600 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
木杰 2018-05-31
  • 打赏
  • 举报
回复
8楼厉害了,给力!!!!!!!!!!!!!!纠结了1天的问题总算解决了
Vincent.WangWZ 2018-01-05
  • 打赏
  • 举报
回复
8楼大神,以后还真的好好看评论,大神隐藏评论中!!!!!!!!!2小时试了各种办法,看到这条后解决。。。
lizhenlzlz 2017-12-04
  • 打赏
  • 举报
回复
引用 8 楼 u012606648 的回复:
如果使用了spring mvc后,如果把<aop:aspectj-autoproxy proxy-target-class="true"/>放在application.xml文件中可能会aop无效,最好把它放在dispatcher-servlet.xml文件中
对我有用
xioruu 2017-11-23
  • 打赏
  • 举报
回复
给八楼比个心
u013363317 2017-11-13
  • 打赏
  • 举报
回复
8楼 牛! 一般很少回帖,这个必须回!
ddtsdg 2017-06-19
  • 打赏
  • 举报
回复
为什么我把复制到MVC就不扫描controller了啊?
冥王 • 雷利 2017-05-17
  • 打赏
  • 举报
回复
8#正解,如果要是切面切在Service层或是Dao层,那么<aop:aspectj-autoproxy proxy-target-class="true"/>放在application.xml也是可以,主要看你的切面切在了controller层还是controller以后的层。
nathem 2017-05-02
  • 打赏
  • 举报
回复
问题解决,特来登录感谢8#,11#两位,谢谢~
93张先生 2017-03-11
  • 打赏
  • 举报
回复
感谢,8# 11# ! 感谢,8# 11# ! 感谢,8# 11# ! 感谢,8# 11# !
wyjun_nxtxdou 2016-12-17
  • 打赏
  • 举报
回复
万分感谢!!!!!!!!!!!!!!!被这个问题困扰了半天,幸得8楼、11楼两位大神。专门登录来感谢!!!真希望能和两位大神交个朋友!!!
swvincent 2016-12-08
  • 打赏
  • 举报
回复
茅塞顿开 切入的类和被切入的类必须是被spring管理的(springIOC),如果是自己new 出来的,切入无效。
yuu_l 2016-11-29
  • 打赏
  • 举报
回复
8楼和11楼,果然行得通
「已注销」 2016-11-16
  • 打赏
  • 举报
回复
感谢8楼大神
spicetang 2016-11-01
  • 打赏
  • 举报
回复
8楼真的大神啊!感谢!
路人甲陈惟鲜 2016-10-19
  • 打赏
  • 举报
回复
8楼大神啊。
ruchiruzui2012 2016-09-28
  • 打赏
  • 举报
回复
感谢八楼终于解决问题了
RoronoaZoro 2016-09-09
  • 打赏
  • 举报
回复
谢谢8楼的解决方案,和 11楼的总结。我也遇到了类似的问题,开始都ok,整合到一起就出问题。
a4903039 2016-06-12
  • 打赏
  • 举报
回复 1
8楼太给力了,项目大了之后,一堆spring配置文件,看的都晕死了,直接去web.xml中找“org.springframework.web.servlet.DispatcherServlet”对应配置的文件,然后如8楼所说,把“<aop:aspectj-autoproxy proxy-target-class="true" />”移过去就好了,真是服气了
JiHeis 2016-06-02
  • 打赏
  • 举报
回复
感谢 8楼 解决了我的大问题
mensha 2016-03-31
  • 打赏
  • 举报
回复
楼上,解决了我一天的困惑,太感谢了,果然是spring mvc搞得
加载更多回复(8)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧