注解方式aop

注解方式配置AOP

xml方式配置AOP

注解方式aop_第1张图片

配置文件


    


    

MyAdvice

@Component
@Aspect
public class MyAdvice {
//     
    @Before("execution(void com.edu.service.impl.UserServiceImpl.*(..))")
    public void beforeAdvice(JoinPoint joinPoint) {
        System.out.println("当前的目标对象是" + joinPoint.getTarget());
        System.out.println("前置增强方法~~~~~");

    }
    @AfterReturning("execution(void com.edu.service.impl.UserServiceImpl.*(..))")
    public void afterReturningAdvice() {
        System.out.println("后置增强方法~~~~~");
    }
    public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        // ProceedingJoinPoint 就是目标方法,切点
        System.out.println("执行目标方法之前~~~~~");
        Object res = proceedingJoinPoint.proceed();
        System.out.println("执行目标方法之后~~~~~");
        return res;
    }
    @AfterThrowing(pointcut = "execution(void com.edu.service.impl.UserServiceImpl.*(..))",throwing = "e")
    public void afterThrowing(Throwable e) {
        System.out.println(e);
        System.out.println("异常抛出通知~~~~~");
    }
    public void afterAdvice() {
        System.out.println("最终增强方法~~~~~");
    }
}

// 切点表达式的抽取

这里怎么定义不用管,是框架里面的,不是java,最后都是用java解析的

// 切点表达式的抽取
@Pointcut("execution(void com.edu.service.impl.UserServiceImpl.*(..))")
public void myPointCut() {
}
@Before("MyAdvice.myPointCut())")

UserServiceImpl

@Service("userService")
public class UserServiceImpl implements UserService {
    @Override
    public void show1() {

        System.out.println("show1~~~~~");
    }

    @Override
    public void show2() {
        System.out.println("show2~~~~~~~~~~");
    }
}

全注解方式

不需要xml配置文件

@Configuration // 核心配置类
@ComponentScan("com.edu") // 组件扫描
@EnableAspectJAutoProxy // 开启AOP注解支持
public class SpringConfig {
}
@ComponentScan("com.edu") ==

@EnableAspectJAutoProxy ==

原理剖析 暂无

和xml方式类似

你可能感兴趣的:(java,开发语言)