-
@Before方法执行前的查看全部
-
Advice的5种注解
@Before:前置通知
@After(finally):后置通知,方法执行完之后
@AfterReturning:返回通知,成功执行之后
@AfterThrowing:异常通知,抛出异常之后
@Around:环绕通知
查看全部 -
第四步:演示测试结果:
@RunWith(SpringRunner.class)
@SpringBootTest
public class ExecutionDemoApplicationTests {
@Autowired
ProductService productService;
@Autowired
SubService subService;
@Autowired
LogService logService;
@Test
public void test() {
System.out.println("###begin test###");
productService.findById(1L);
productService.findByTwoArgs(1L,"hello");
productService.getName();
subService.demo();
try {
productService.exDemo();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
查看全部 -
第一步:需要添加的依赖:
aop
test
查看全部 -
第二步:子包下的service
SubService:
@Component
public class SubService extends ProductService{
public void demo(){
System.out.println("execute sub service method");
}
}查看全部 -
第三步:
/**
* //匹配任何公共方法
@Pointcut("execution(public * com.imooc.service.*.*(..))")
//匹配com.imooc包及子包下Service类中无参方法
@Pointcut("execution(* com.imooc..*Service.*())")
//匹配com.imooc包及子包下Service类中的任何只有一个参数的方法
@Pointcut("execution(* com.imooc..*Service.*(*))")
//匹配com.imooc包及子包下任何类的任何方法
@Pointcut("execution(* com.imooc..*.*(..))")
//匹配com.imooc包及子包下返回值为String的任何方法
@Pointcut("execution(String com.imooc..*.*(..))")
//匹配异常
execution(public * com.imooc.service.*.*(..) throws java.lang.IllegalAccessException)
* Created by cat on 2017-02-19.
*/
@Aspect
@Component
public class ExecutionAspectConfig {
@Pointcut("execution(public * com.imooc.service..*Service.*(..) throws java.lang.IllegalAccessException)")
public void matchCondition(){}
@Before("matchCondition()")//before代表要执行插入的逻辑
public void before(){
System.out.println("");
System.out.println("###before");
}
}查看全部 -
execution表达式
execution(<修改符模式>?<返回类型模式><方法名模式>(<参数模式>)<异常模式>?)格式
除了返回类型模式、方法名模式和参数模式外,其它项都是可选的
查看全部 -
@within和@target两个注解可在被标注类的继承子类所继承
public class AnnoAspectConfig {
@Pointcut("@within(com.imooc.anno.NeedSecured) && within(com.imooc..*)")
// @Pointcut("@target(com.imooc.anno.NeedSecured) && within(com.imooc..*)")
public void matchAnno(){}
@Before("matchAnno()")
public void before(){
System.out.println("");
System.out.println("###before");
}
}查看全部 -
匹配注解
//匹配方法标注有AdminOnly的注解的方法
@Pointcut("@annotation(com.imooc.demo.security.AdminOnly)")
public void annoDemo(){}
//匹配标注有Beta的类底下的方法,要求的annotation的RetentionPolicy级别为CLASS
@Pointcut("@within(com.google.common.annotations.Beta)")
public void annoWithinDemo(){}
//匹配标注有Repository的类底下的方法,要求的annotation的RetentionPolicy级别为RUNTIME
@Pointcut("@target(org.springframework.stereotype.Repository)")
public void annoTargetDemo(){}
//匹配传入的参数类标注有Repository注解的方法
@Pointcut("@args(org.springframework.stereotype.Repository)")
public void annoArgsDemo(){}
查看全部 -
public class AnnoAspectConfig {
@Pointcut("@annotation(com.imooc.anno.AdminOnly)
public void matchAnno(){}
@Before("matchAnno()")
public void before(){
System.out.println("");
System.out.println("###before");
}
}/**
* * Created by cat on 2017-02-19.在被拦截类上添加方法上添加@AdminOnly注解
*/
@Component
public class LogService implements Loggable{
@Override
@AdminOnly
public void log() {
System.out.println("log from LogService");
}
public void annoArg(Product product){
System.out.println("execute log service annoArg");
}
}查看全部 -
匹配注解:
查看全部 -
匹配参数
//匹配任何以find开头而且只有一个Long参数的方法
@Pointcut("execution(* *..find*(Long))"){}
public void demo1(){}
/**
* //匹配任何以find开头而且只有一个Long参数的方法
* @Pointcut("execution(* *..find*(Long))")
* //匹配任何以find开头的而且第一个参数为Long型的方法
* @Pointcut("execution(* *..find*(Long,..))")
* //匹配任何只有一个Long参数的方法
* @Pointcut("within(com.imooc..*) && args(Long)")
* //匹配第一个参数为Long型的方法
* @Pointcut("within(com.imooc..*) && args(Long,..)")
* Created by cat on 2016-12-04.
*/
@Aspect
@Component
public class ArgsAspectConfig {
@Pointcut("args(Long,String) && within(com.imooc.service.*)")
public void matchArgs(){}
@Before("matchArgs()")
public void before(){
System.out.println("");
System.out.println("###before");
}
}查看全部 -
匹配参数:<br/>查看全部
-
/**
* //匹配AOP对象的目标对象为指定类型的方法,即LogService的aop代理对象的方法
* @Pointcut("this(com.imooc.log.Loggable)")
* //匹配实现Loggable接口的目标对象(而不是aop代理后的对象)的方法
* @Pointcut("target(com.imooc.log.Loggable)")
* //this 可以拦截 DeclareParents(Introduction)
* //target 不拦截 DeclareParents(Introduction)
* //匹配所有以Service结尾的bean里头的方法
* @Pointcut("bean(*Service)")
* Created by cat on 2016-12-04.
*/
@Aspect
@Component
public class ObjectAspectConfig {
@Pointcut("bean(logService)")
public void matchCondition(){}
@Before("matchCondition()")
public void before(){
System.out.println("");
System.out.println("###before");
}
}查看全部 -
匹配对象:
1:this(包名):匹配AOP对象的目标对象指定类型的方法;
2:target(包名):匹配实现接口的目标对象的方法(不是AOP代理后的对象);
3:bean(包名):匹配所有以Service结尾的bean里头的方法;
查看全部
举报