-
强制使用cglib代理。
查看全部 -
@Before:前置通知
@After(finally):后置通知,方法执行完之后
@AfterReturning:返回通知,成功执行之后
@AfterThrowing:异常通知,抛出异常之后
@Around:环绕通知
查看全部 -
组成(designator+widlcards+operators)
表达式
匹配方法:execution
匹配注解:@target 、@Args()、@within() 、@annotation()
匹配包/类型: within()
匹配对象:this()、target()、bean()
匹配参数: args()
查看全部 -
使用SpringAop的注意事项
查看全部 -
1、引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency>
2、添加使用@Cacheable注解
@Cacheable(cacheNames={"menu"}) public List<String> getMenuList(){ System.out.println("只有第一次被调用"); return Arrays.asList("java","C++","PHP"); }
3、调用结果查看全部 -
Spring Security 权限控制:@PreAuthorize("hasRole('ROLE_ADMIN')")
配置类:查看全部 -
1、Spring创建Bean流程
2、强制使用Cglib代理
3、Spring代理使用规则查看全部 -
Cglib代理实现MethodInterceptor接口
查看全部 -
public class JdkProxy implements InvocationHandler { Object realObj = null; public JdkProxy(Object obj) { this.realObj = obj; } // 反射实现动态代理 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("befor"); Object result = null; try { result = method.invoke(realObj, args); } catch (Exception ex) { System.out.println("ex:" + ex.getMessage()); throw ex; } finally { System.out.println("after"); } return result; } }
查看全部 -
1、客户端通过接口引用目标对象或代理对象,这里体现了面向对象的面向接口,客户端调用的目标对象的方法,代理对象都要有,因此目标对象和代理对象共同作为接口的实现类
2、代理对象把真正的方法委托给目标对象来执行,自己就执行额外的也就是AOP要织入的逻辑,即客户端调用代理的方法,同时给代理类传入目标对象,在代理类里面代理类通过目标对象来调用目标类的方法,在执行方法前后加上代理类的逻辑
查看全部 -
编程范式概览
查看全部 -
5种Advice注解
查看全部 -
execution()格式——由前到后含义
修饰符,返回值,描述包名,描述方法名(描述方法参数),匹配方法抛出的异常
@Pointcut("execution(public * com.imooc.service..*Service.*(..))")
截图中 ?表示是可以省略的
查看全部 -
注解匹配...
查看全部 -
匹配参数
//匹配任何以find开头而且只有一个Long参数的方法 @Pointcut("execution(* *..find*(Long))") public void demo1(){ } //匹配任何只有一个Long参数的为Long型的方法 @Pointcut("args(Long)") public void demo2(){ } //匹配相关包下参数第一个是Long类型,第二个是String类型的方法 @Pointcut("args(Long,String) && within(com.pro.service.*)") public void demo22(){ } //匹配任何以find开头的而且第一个参数为Long型的方法 @Pointcut("execution(* *..find*(Long,..))") public void demo3(){ } //匹配第一个参数为Long型的方法 @Pointcut("args(Long,..)") public void demo4(){ }
查看全部
举报