标签:context pac depend 需要 tin 配置 pack port 方法
aop存在的目的是进一步解耦, spring支持aspectJ的注解式切面编程
1), 使用@Aspect声明为一个切面, 并使用@Component加入context中
2), 使用@After, @Before, @Aroud定义advice, 可直接引入 pointcut
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.6</version> </dependency>
package com.wenbronk.aop; import org.springframework.stereotype.Component; /** * Created by wenbronk on 2017/5/13. */ @Component public class InterceptAnnotation { @AopAnnotation(value = "注解拦截") public void intercept() { System.out.println("annotation intercepting"); } }
package com.wenbronk.aop; import org.springframework.stereotype.Component; /** * 方法拦截 * Created by wenbronk on 2017/5/13. */ @Component public class IntercepterMethod { public void intercepter() { System.out.println("method intercepter"); } }
package com.wenbronk.aop; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component; import java.lang.reflect.Method; /** * 切面 * Created by wenbronk on 2017/5/13. */ @Aspect @Component public class AopAspect { @Pointcut(value = "@annotation(com.wenbronk.aop.AopAnnotation)") // 切点为注解 public void pointCut() {}; /** * 注解式拦截, 可在@After, @Before, @Aroud中直接引入 @pointCut * @param joinPoint */ @After(value = "pointCut()") public void afterPointCut(JoinPoint joinPoint) { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); AopAnnotation annotation = method.getAnnotation(AopAnnotation.class); System.out.println("注解式拦截: " + annotation.value()); } /** * 方法式拦截 * @param joinPoint */ @Before(value = "execution(* com.wenbronk.aop.IntercepterMethod.*(..))") public void beforePointCut(JoinPoint joinPoint) { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); System.out.println("方法式拦截: " + method.getName()); } }
如果你使用的是springboot方式, 那么需要在启动类上添加 @EnableAspectJAutoProxy 开启AspectJ的支持
package com.wenbronk.aop; import org.springframework.boot.SpringBootConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.EnableAspectJAutoProxy; /** * 配置类, 省却Application.java * Created by wenbronk on 2017/5/13. */ @SpringBootConfiguration @ComponentScan(basePackages = {"com.wenbronk.aop"}) @EnableAspectJAutoProxy // 开启对AspectJ的支持 public class AopConfig { }
package com.wenbronk.aop; import org.springframework.context.annotation.AnnotationConfigApplicationContext; /** * 测试类 * Created by wenbronk on 2017/5/13. */ public class TestAop { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AopConfig.class); // 注解式拦截 InterceptAnnotation annotation = context.getBean(InterceptAnnotation.class); annotation.intercept(); // 方法拦截 IntercepterMethod method = context.getBean(IntercepterMethod.class); method.intercepter(); context.close(); } }
http://www.cnblogs.com/wenbronk/
标签:context pac depend 需要 tin 配置 pack port 方法
原文地址:http://www.cnblogs.com/wenbronk/p/6848984.html