博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring AOP Schema aop:config、tx:advice
阅读量:7098 次
发布时间:2019-06-28

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

Spring AOP Schema  aop:config、tx:advice

一、      利用aop:config标签实现AOP

首先看个例子,如下

接口代码:

package com.lei.demo.aop.schema;public interface IHello {    public void sayHello();}

 

接口实现:

package com.lei.demo.aop.schema;public class HelloService implements IHello {    public void sayHello() {        System.out.println("-----Hello World!-----");    }}

接下来我们要实现AOP,即调用sayHello方法时切入通知。

1.      第一种方法aop:config中配置aop:pointcut和aop:aspect

定义一个切面支持类HelloAspect.java

package com.lei.demo.aop.schema;/* * 切面支持类 */public class HelloAspect {    //前置通知      public void beforeAdvice() {          System.out.println("===========before advice");      }        //后置最终通知      public void afterFinallyAdvice() {          System.out.println("===========after finally advice");    }}

 

Xml配置:Spring-AOP-Schema.xml

以上配置中method="beforeAdvice"method="afterFinallyAdvice"对应helloAspect中的方法

 

测试,App.java

package com.lei.demo.aop.schema;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class App {    private static ApplicationContext ctx;    public static void main(String[] args) {                ctx = new ClassPathXmlApplicationContext("Spring-AOP-Schema.xml");                IHello helloService = ctx.getBean("helloService",IHello.class);                helloService.sayHello();    }}

 

运行App.java,结果如下:

===========before advice

-----Hello World!-----

===========after finally advice

 

2.      第二种方法aop:config中配置aop:pointcut和aop:advisor

实现org.aopalliance.intercept.MethodInvocation接口,

HelloAroundAdvice.java如下:

package com.lei.demo.aop.schema;import java.lang.reflect.Method;import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;public class HelloAroundAdvice implements MethodInterceptor {    public Object invoke(MethodInvocation arg0) throws Throwable {        System.out.println("++++++before advice");        arg0.proceed();        System.out.println("++++++after advice");                return null;    }}

 

Xml配置:Spring-AOP-Schema.xml

 

仍然运行App.java,结果如下:

++++++before advice

-----Hello World!-----

++++++after advice

 

 

二、      AOP中加入事务,引入tx:advice

集成Hibernate时,需要引入事务,以下配置引用Spring 4.0.3和Hibernate 4.3.5

Spring-hibernate.xml如下:

com.lei.demo.entity
${hibernate.hbm2ddl.auto}
${hibernate.dialect}
${hibernate.show_sql}

 

重点看一下tx:advice的配置

意思是说,这个事务advice的管理者为transactionManager,而这个advice中规定了匹配add*get*方法的传输方式为required,也就是说没有sessionFactory的时候会自动建立,有的时候就不会建立了。当然这只是规定了一个advice,你还需要指定一个aop:pointcut去引用它,例如下边的aop:config配置节。这样,这个advice就被织入到txPointcut这个pointcut上了。

 

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

你可能感兴趣的文章
net log4net 通用配置
查看>>
postgresql如何实现group_concat功能
查看>>
Js 向json对象中添加新元素
查看>>
ip反查域名
查看>>
【OpenCV归纳】1 体验OpenCV
查看>>
毛毛雨的博客乐园—内容简介
查看>>
实现一个3D图片轮播插件 —— 更新版
查看>>
C# 如何实现WinForm程序自重启(重新启动自己)
查看>>
Jenkins 集成 git .net 和nuget
查看>>
(二)重定向以及传值
查看>>
Spark任务调度初识
查看>>
《Linux内核设计与实现》读书笔记(十二)- 内存管理
查看>>
Linux 小知识翻译 - 「分区」
查看>>
Linux 小知识翻译 - 「cron」
查看>>
[Sass]局部变量和全局变量
查看>>
docker 一些简略环境搭建及部分链接
查看>>
android studio获取SHA1
查看>>
怎么才能在windows使用git命令
查看>>
Sigar应用
查看>>
从单体架构到微服务的演变之路
查看>>