讲述了Java:SpringAOP-面向切面编程,包括:编写拦截规则的注解、编写被拦截类。
树图思维导图提供 Java-SpringAOP-面向切面编程 在线思维导图免费制作,点击“编辑”按钮,可对 Java-SpringAOP-面向切面编程 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:24f021ae703f709ce5b5552429a3221f
Java-SpringAOP-面向切面编程思维导图模板大纲
<!-- spring aop支持 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.1.6.RELEASE</version> </dependency> <!-- aspectj支持 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.8.5</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.5</version> </dependency>
package com.wisely.highlight_spring4.ch1.aop; @Configuration @ComponentScan("com.wisely.highlight_spring4.ch1.aop") @EnableAspectJAutoProxy //1 开启Spring对AspectJ代理的支持。 public class AopConfig { }
package com.wisely.highlight_spring4.ch1.aop; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Action { String name(); }
使用注解
package com.wisely.highlight_spring4.ch1.aop; @Service public class DemoAnnotationService { @Action(name="注解式拦截的add操作") public void add(){} }
使用方法规则
package com.wisely.highlight_spring4.ch1.aop; @Service public class DemoMethodService { public void add(){} }
package com.wisely.highlight_spring4.ch1.aop; @Aspect //1 声明一个切面 @Component //2 让此切面成为Spring容器管理的Bean。 public class LogAspect { @Pointcut("@annotation(com.wisely.highlight_spring4.ch1.aop.Action)") //3 声明切点。 public void annotationPointCut(){}; @After("annotationPointCut()") //4 声明一个建言,并使用@PointCut定义的切点 public void after(JoinPoint joinPoint) { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); Action action = method.getAnnotation(Action.class); System.out.println("注解式拦截 " + action.name()); //5 通过反射可获得注解上的属性,然后做日志记录相关的操作,下面的相同。 } @Before("execution(* com.wisely.highlight_spring4.ch1.aop.DemoMethodService.*(..))") //6 声明一个建言,此建言直接使用拦截规则作为参数。 public void before(JoinPoint joinPoint){ MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); System.out.println("方法规则式拦截,"+method.getName()); } }
public class Main { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AopConfig.class); //1 DemoAnnotationService demoAnnotationService = context.getBean(DemoAnnotationService.class); DemoMethodService demoMethodService = context.getBean(DemoMethodService.class); demoAnnotationService.add(); demoMethodService.add(); context.close(); } }
注解式拦截 注解式拦截的add操作 方法规则式拦截, add