项目是spring+mybatis的,因为mybatis的dao层没有实现类,所以我想在方法进入dao层之前调用我的切面,这能实现吗?,我这一直报错,
Cannot subclass final class class $Proxy36
在线等!
在贴一个网址:http://www.cnblogs.com/daxin/p/3236861.html
你可以查询一下 mybatis的拦截器
你好,这个问题我曾经想过。做权限系统。在mybatis dao执行查询之前拦截一下根据当前用户的不同添入不同的条件。我不知道你用过pageHelper没有。
pageHelper的原理是使用了mybatis的接口 将分页信息切入到dao里的。
pageHelper是如何在mybatis中工作呢,是通过mybatis的pulgin实现了Interceptor接口。给你贴一个网址:
http://blog.csdn.net/jaryle/article/details/52315565
最后的话我表示没有用过spring切 一个接口层。不过思路灵活可以参考pageHelper。
望采纳!
Pointcut设置的时候写mybatis的Mapper接口就行了
刚刚查了一下看了一个资料。也许接口再生成代理类的时候已经是final的了。final的类可不能在被代理。我也不知道对不对哈。贴下网址
如果你解决了私信我下哈。我也学习一下。嘿嘿
http://wls981.iteye.com/blog/1991356
以下内容引用此网页内容:
解决问题的检查点:
1、需要AOP拦截的类是否是final的,final类不可使用CGLIB来代理。
2、是否在给BEAN配AOP的时候强制使用CGLIB,如果是则可指定proxyTargetClass属性以让spring强制代理目标类。
3、类是否被多次代理了,如果类被多次代理过,则第二次进行代理的时候拿到的是第一次代理后的对象,这个对象是个final形式的,所以会出现这个错误。
基于第三点要注意,类是否被多次代码不紧紧取决于类是否被配置了多次AOP,如果类实现了某个接口,则还要看类实现的接口是否被aop拦截过。如果类实现了接口且接口也被AOP拦截了,则很可能出现上面的错误(是否出错取决于AOP代理执行的顺序)。
在config-xml文件配置PointCat标签,然后写上包的路径。然后在src下面建个新包,专门写代理对象要实现的业务。
在给接口名字定义的时候 设置规则
比如:
@RequestMapping("/api")
然后给接口名是/api/* 添加拦截器
@Configuration
@ComponentScan(basePackages = {SystemConstants.WEB_BASE_PACKAGE, SystemConstants.CORE_BASE_PACKAGE})
public class MVCConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new ControllerInteceptor()).addPathPatterns("/**")
.excludePathPatterns("/api/**", "/index");
super.addInterceptors(registry);
}
}
希望对你有用