一、AOP术语。
切入点,是指实际被增强的方法。
通知,是指实际增强的逻辑部分。
通知有5种类型,分别是前置通知,后置通知,环绕通知,异常通知,最终通知。
切面,是指把通知应用到切入点的过程。
切点表达式,execution([权限修饰符][返回类型][类限定名][方法名]([参数列表]))。
例如:
1.对com.yhx.dao.UserDao类中的show方法进行增强。
execution(public void com.yhx.dao.UserDao.show(..))
2.对com.yhx.dao.UserDao类中的所有方法进行增强。
execution(* com.yhx.dao.UserDao.*(..))
3.对com.yhx.dao包及其子包中的类的所有方法进行增强。
execution(* com.yhx.dao.*.*(..))
二、Spring中的AOP使用。
Spring框架集成AspectJ实现AOP *** 作。
SpringConfig配置类:
//配置类注解 @Configuration //组件扫描 @ComponentScan(basePackages = {"com.yhx"}) //自动代理 @EnableAspectJAutoProxy public class SpringConfig{}
UserDao被增强类:
@Component //被增强类 public class UserDao { public void show(){ System.out.println("show running..."); } }
UserDaoProxy增强类:
@Component //增强类 @Aspect public class UserDaoProxy { //公共切点表达式提取 @Pointcut(value = "execution(* com.yhx.dao.UserDao.show(..))") public void pointDemo(){ } //前置通知 @Before(value = "pointDemo()") public void before(){ System.out.println("before running..."); } //后置通知(有异常,不通知) @AfterReturning(value = "pointDemo()") public void afterReturning(){ System.out.println("afterReturning running..."); } //环绕通知 @Around(value = "pointDemo()") public void around(){ System.out.println("around running..."); } //异常通知(有异常的时候,才进行通知) @AfterThrowing(value = "pointDemo()") public void afterThrowing(){ System.out.println("afterThrowing running..."); } //最终通知(无论是否有异常,都通知) @After(value = "pointDemo()") public void after(){ System.out.println("after running..."); } }
ProxyTest测试类:
public class ProxyTest { public static void main(String[] args) { ApplicationContext app = new AnnotationConfigApplicationContext(SpringConfig.class); UserDao userDao = app.getBean("userDao", UserDao.class); userDao.show(); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)