17Aspectij-2018/07/31

  • 1.Aspectj基于xml

    • 前置通知

      • method : 通知,及方法名
      • pointcut :切入点表达式,此表达式只能当前通知使用。
      • pointcut-ref : 切入点引用,可以与其他通知共享切入点。
      • 通知方法格式:public void myBefore(JoinPoint joinPoint){参数1:org.aspectj.lang.JoinPoint } 用于描述连接点(目标方法),获得目标方法名等
    • 后置通知:目标方法后执行,获得返回值
      • 通知方法格式:public void myAfterReturning(JoinPoint joinPoint,Object ret){

        • 参数1:连接点描述
        • 参数2:类型Object,参数名 returning="ret" 配置的
    • 环绕通知
      • 通知方法格式:public Object myAround(ProceedingJoinPoint joinPoint) throws Throwable{

        • 返回值类型:Object
        • 方法名:任意
        • 参数:org.aspectj.lang.ProceedingJoinPoint
        • 抛出异常
      • 执行目标方法:Object obj = joinPoint.proceed();
    • 抛出异常
      • <aop:after-throwing method="" pointcut-ref="" throwing=""/>

        • throwing :通知方法的第二个参数名称
      • 通知方法格式:public void myAfterThrowing(JoinPoint joinPoint,Throwable e){
        • 参数1:连接点描述对象
        • 参数2:获得异常信息,类型Throwable ,参数名由throwing="e" 配置
  • 2.注解在方法前面注解
    • 声明公共切入点

      • @Pointcut("execution(* com.itheima.daspect.banno.UserServiceImpl.*(..))")private void myPointCut(){}
    • @Before(value="myPointCut()")value可以省略
    • @AfterReturning(value="myPointCut()" ,returning="ret")
    • @Around("myPointCut()")
    • @AfterThrowing(value="execution(* com.itheima.daspect.banno.UserServiceImpl.*(..))" ,throwing="e")
  • 3.JdbcTemplate
    • 创建数据源(连接池) dbcp

      BasicDataSource dataSource = new BasicDataSource(); 
      // 基本4项
      dataSource.setDriverClassName("com.mysql.jdbc.Driver");
      dataSource.setUrl("jdbc:mysql://localhost:3306/ee19springday02");
      dataSource.setUsername("root");
      dataSource.setPassword("1234");
    • 创建模板 
      JdbcTemplate jdbcTemplate = new JdbcTemplate();
      jdbcTemplate.setDataSource(dataSource);
    • 通过api操作 
      jdbcTemplate.update("insert into t_user(username,password) values(?,?);", "tom","998");
  • 4.传播行为:在两个业务之间如何共享事务
    • PROPAGATION_REQUIRED , required , 必须 【默认值】 支持当前事务,A如果有事务,B将使用该事务。 如果A没有事务,B将创建一个新的事务。
    • PROPAGATIONREQUIRESNEW , requires_new ,必须新的 如果A有事务,将A的事务挂起,B创建一个新的事务 如果A没有事务,B创建一个新的事务
    • PROPAGATION_NESTED ,nested ,嵌套 A和B底层采用保存点机制,形成嵌套事务。
  • 5.手动管理事务
    • 1.service 需要获得 TransactionTemplate
    • 2.spring 配置模板,并注入给service
    • 3.模板需要注入事务管理器
    • 4.配置事务管理器:DataSourceTransactionManager ,需要注入DataSource

17Aspectij的更多相关文章

随机推荐

  1. java Bean及其使用

    1 getter/setter方法 java例子: public class student { private String name; public String getName() { retu ...

  2. Killer Problem(暴力)

    题意: 给定一个序列,每次询问l到r之间两个数差的绝对值的最小值. 分析: 开始以为是线段树离线处理,实际暴力就好! #include <map> #include <set> ...

  3. [Codeforces 496E] Distributing Parts

    [题目链接] https://codeforces.com/contest/496/problem/E [算法] 按右端点排序 , 每个乐曲优先选取的左端点最大的演奏家 用std :: set维护贪心 ...

  4. python-----删除文件到回收站

    python删除文件一般使用os.remove,但这样删是直接删除文件,不删到回收站的,那么想删除文件到回收站怎么办? 这时,就需要使用shell模块了 from win32com.shell imp ...

  5. dubbo和SpringCould

    作为常用的微服务框架,这两者经常会被对比,但实际上两者有不少差异. dubbo好比组装电脑,很多东西可以自己选配,自由度高但对于小白难入门,很可能因为某个组件没选好,导致完全用不起来. SpringC ...

  6. [入门帮助] Kafka入门经典教程

    问题导读 1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic.发送消息.消费消息?3.如何书写Kafka程序?4.数据传输的事务定义有哪三种?5.Kafka判断一个节点是否活着有 ...

  7. Zookeeper日志文件&事务日志&数据快照

    Zookeeper持久化两类数据,Transaction以及Snapshot,logDir存储transaction命令,dataDir存储snap快照,其下子目录名称以version-2命名,子目录 ...

  8. js几种escape()解码与unescape()编码

    js几种escape()解码与unescape()编码 www.111cn.net 编辑:kepeer 来源:转载 一篇js几种escape()解码与unescape()编码函数,同时我们也和它和服务 ...

  9. bzoj 1833: [ZJOI2010]count 数字计数【数位dp】

    非典型数位dp 先预处理出f[i][j][k]表示从后往前第i位为j时k的个数,然后把答案转换为ans(r)-ans(l-1),用预处理出的f数组dp出f即可(可能也不是dp吧--) #include ...

  10. bzoj 1778: [Usaco2010 Hol]Dotp 驱逐猪猡【dp+高斯消元】

    算是比较经典的高斯消元应用了 设f[i]为i点答案,那么dp转移为f[u]=Σf[v]*(1-p/q)/d[v],意思是在u点爆炸可以从与u相连的v点转移过来 然后因为所有f都是未知数,高斯消元即可( ...