博客
关于我
spring 基于注解实现Aop
阅读量:396 次
发布时间:2019-03-05

本文共 3805 字,大约阅读时间需要 12 分钟。

一.基于spirng的注解实现Aop的开发步骤

 

1.1 在pom文件中添加依赖

junit
junit
4.11
test
org.springframework
spring-context
5.0.2.RELEASE
org.aspectj
aspectjweaver
1.8.7

1.2 创建目标类

1. iAccountService接口

package com.ljf.spring.aop.anno.service;public interface IAccountService {    /**     * 模拟保存账户     */    void saveAccount();    /**     * 模拟更新账户     * @param i     */    void updateAccount(int i);    /**     * 删除账户     * @return     */    int  deleteAccount();}

2. 实现类

package com.ljf.spring.aop.anno.service.impl;import com.ljf.spring.aop.anno.service.IAccountService;import org.springframework.stereotype.Service;/** * @ClassName: AccountService * @Description: TODO * @Author: liujianfu * @Date: 2021/02/05 10:41:48  * @Version: V1.0 **/@Service("accountService")public class AccountService implements IAccountService {    @Override    public void saveAccount() {        System.out.println("执行了保存");        int i=1/0;    }    @Override    public void updateAccount(int i) {        System.out.println("执行了更新"+i);    }    @Override    public int deleteAccount() {        System.out.println("执行了删除");        return 0;    }}

 

1.3 创建切面类

在切面类中定义切入点、通知、切面

package com.ljf.spring.aop.anno.util;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.*;import org.springframework.stereotype.Component;/** * @ClassName: Logger * @Description: TODO * @Author: liujianfu * @Date: 2021/02/05 10:45:13  * @Version: V1.0 **/@Component("logger")@Aspect//表示当前类是一个切面类public class Logger {    //切入点    @Pointcut("execution(* com.ljf.spring.aop.anno.service.impl.*.*(..))")    private void pt1(){}   //作用是切点表达式的抽取    /**     * 前置通知     */  // @Before("pt1()")    public  void beforePrintLog(){        System.out.println("前置通知Logger类中的beforePrintLog方法开始记录日志了。。。");    }    /**     * 后置通知     *///    @AfterReturning("pt1()")    public  void afterReturningPrintLog(){        System.out.println("后置通知Logger类中的afterReturningPrintLog方法开始记录日志了。。。");    }    /**     * 异常通知     */    //@AfterThrowing("pt1()")    public  void afterThrowingPrintLog(){        System.out.println("异常通知Logger类中的afterThrowingPrintLog方法开始记录日志了。。。");    }    /**     * 最终通知     *///    @After("pt1()")    public  void afterPrintLog(){        System.out.println("最终通知Logger类中的afterPrintLog方法开始记录日志了。。。");    }    @Around("pt1()")    public Object aroundPringLog(ProceedingJoinPoint pjp){        Object rtValue = null;        try{            Object[] args = pjp.getArgs();//得到方法执行所需的参数            System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。前置");            rtValue = pjp.proceed(args);//明确调用业务层方法(切入点方法)            System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。后置");            return rtValue;        }catch (Throwable t){            System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。异常");            throw new RuntimeException(t);        }finally {            System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。最终");        }    }}

1.4 在xml配置文件中开启Aop注解

1.5 调用

package com.ljf.spring.aop.anno;import com.ljf.spring.aop.anno.service.IAccountService;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * Hello world! * */public class App {    public static void main(String[] args) {        //1.获取容器        ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");        //2.获取对象        IAccountService as = (IAccountService)ac.getBean("accountService");        //3.执行方法        as.saveAccount();    }}

使用了环绕通知:

转载地址:http://lruzz.baihongyu.com/

你可能感兴趣的文章
Mysql 语句操作索引SQL语句
查看>>
MySQL 误操作后数据恢复(update,delete忘加where条件)
查看>>
MySQL 调优/优化的 101 个建议!
查看>>
mysql 转义字符用法_MySql 转义字符的使用说明
查看>>
mysql 输入密码秒退
查看>>
mysql 递归查找父节点_MySQL递归查询树状表的子节点、父节点具体实现
查看>>
mysql 通过查看mysql 配置参数、状态来优化你的mysql
查看>>
mysql 里对root及普通用户赋权及更改密码的一些命令
查看>>
Mysql 重置自增列的开始序号
查看>>
mysql 锁机制 mvcc_Mysql性能优化-事务、锁和MVCC
查看>>
MySQL 错误
查看>>
mysql 随机数 rand使用
查看>>
MySQL 面试题汇总
查看>>
MySQL 面试,必须掌握的 8 大核心点
查看>>
MySQL 高可用性之keepalived+mysql双主
查看>>
MySQL 高性能优化规范建议
查看>>
mysql 默认事务隔离级别下锁分析
查看>>
Mysql--逻辑架构
查看>>
MySql-2019-4-21-复习
查看>>
mysql-5.6.17-win32免安装版配置
查看>>