Spring基于注解的AOP编程

本文详细介绍了如何在Spring中配置基于注解的AOP,包括让用户服务类和自定义通知类被Spring管理,配置切入点和通知,以及在主配置文件中开启AOP注解支持。通过这些步骤,可以实现方法执行前后、异常处理等不同阶段的增强功能,提供灵活的代码逻辑控制。

基于注解的AOP配置

开发步骤

1.让UserServiceImpl目标对象呗Spring管理到

@Service("userService")  //把该类交给Spring内存中.
public class UserServiceImpl implements UserService {

    @Override
    public void addUser() {
        System.out.println("添加用户信息。。。");
        int i = 1 / 0;// 算术异常

    }

    @Override
    public void updateUser() {
        System.out.println("用户信息已经发生更改。。。");
    }

    @Override
    public void deleteUserById(int id) {
        System.out.println("已经根据指定的"+id+"值删除指定的对象。。。");
    }

    @Override
    public List<Object> queryObject() {
        return null;
    }

    @Override
    public int queryTotal() {
        return 0;
    }

    @Override
    public List<Object> queryFuzzyLike(String name) {
        return null;
    }

    @Override
    public Object queryObjectById(int id) {
        return null;
    }


}

2.让MyAddvice通知类也被Spring管理到
3.配置切面
…1.配置切入点
…2.把切入点和通知进行绑定形成切面
…3.让当前的MyAdvice通知类标记可以配置的切面的类

@Component("myAdvice")//把他交给Spring内存空间,以便于能在spring内存空间中找到并使用
@Aspect // 让当前的通知类具备有配置有切面的条件
public class MyAdvice {

     // 配置切入点.会扫描该包下所有的类.所有的方法
     @Pointcut("execution(* com.zhiyou100.service..*.*(..))")
     // 此方法名()即为id标识
     public void pointCut() {}

     // 通知的内容需要往方法存放
     @Before("pointCut()")//表示把该同志加入到这个切点的下形成切面
     public void before(){
         System.out.println("前置通知。。。已经连接上数据库。。。。");
         // addUser方法有aop加持之后
         // 前置通知。。。已经连接上数据库。。。。
         // 添加用户信息。。。
     }

    /**
     *   前置通知     before()
     *   后置通知     afterReturning()  如果切入点有异常信息,则会中断
     *   异常拦截通知  afterThrowing()   如果切入点中有异常信息,则会植入该方法定义的增强的内容
     *   环绕通知     around()  前置通知+后置通知+异常拦截通知
     *   最终通知     after()   他不管切入点中是否有异常信息,都会执行该方法定义的增强的内容。
     */

    // 后置通知
    @AfterReturning("pointCut()")
    public void afterReturning() {
        System.out.println("后置通知。。。。。可以进行资源释放。。。");
    }

    // 异常拦截通知
    @AfterThrowing("pointCut()")
    public void afterThrowing() {
        System.out.println("异常拦截通知。。。。。此时切入点中有异常信息。。。。");
    }

    // 环绕通知
    //@Around("pointCut()")
    public void around(ProceedingJoinPoint joinPoint){
        try {
            System.out.println("方法执行前加载信息。。。。。");// 前置通知
            joinPoint.proceed(); // Method invoke()
            System.out.println("方法执行后释放信息。。。。");// 后置通知
        } catch (Throwable throwable) {
            System.out.println("异常发生时。。。。执行异常处理。。。。。");// 异常拦截通知
            throwable.printStackTrace();
        }
    }

    // 最终通知
    @After("pointCut()")
    public void after() {
        System.out.println("不管方法执行中是否异常。。。我都要释放资源。。。");
    }


}

4.开启Spring的AOP注解,在主配置文件中使用

 <!--Spring注解需要开启,不开启就无法使用-->
    <!--开启Spring支持AOP注解 目的是为了织入通知  完成自动代理-->
    <aop:aspectj-autoproxy/>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值