现在的位置: 主页 > 联系方式 > 文章列表

spring 注解XML实现AOP编程

作者:北京财贸天阶投资顾问有限公司 来源:www.usasheng.com 发布时间:2017-09-03 12:50:20
 

spring 注解XML实现AOP编程

spring-aop-3.2.5.RELEASE.jar 【spring3.2源码】

aopalliance.jar 【spring2.5源码/lib/aopalliance】

aspectjweaver.jar 【spring2.5源码/lib/aspectj】或【aspectj-1.8.2lib】

aspectjrt.jar 【spring2.5源码/lib/aspectj】或【aspectj-1.8.2lib】

注意:用到spring2.5版本的jar文件,如果用jdk1.7可能会有问题。

需要升级aspectj组件,即使用aspectj-1.8.2版本中提供jar文件提供。

2) bean.xml中引入aop名称空间(去文档中搜索xmln:aop)

3) 开启aop注解

4) 使用注解

@Aspect 指定一个类为切面类

@Pointcut(execution(* cn.itcast.e_aop_anno.*.*(..))) 指定切入点表达式

@Before(pointCut_()) 前置通知: 目标方法之前执行

@After(pointCut_()) 后置通知:目标方法之后执行(始终执行)

@AfterReturning(pointCut_()) 返回后通知: 执行方法结束前执行(异常不执行)

@AfterThrowing(pointCut_()) 异常通知: 出现异常时候执行

@Around(pointCut_()) 环绕通知: 环绕目标方法执行

案例:

1)IUserDao 接口

package cn.itcast.aop_anno; public interface IUserDao { public void save(); } 2)UserDao 实现了IUserDao接口 package cn.itcast.aop_anno; import org.springframework.stereotype.Component; @Component //方式IOC容器管理 public class UserDao implements IUserDao { public void save() { System.out.println(核心业务!保存); } } 3)切面类 Aop package cn.itcast.aop_anno; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; @Component @Aspect //指定当前类为切面类 public class Aop {//切面类 @Pointcut(execution(* cn.itcast.aop_anno.*.*(..)))// 切面表达式 public void pointCut_(){ } @Before(pointCut_())//拦截对切面表示式指定的方法.. public void before(){ System.out.println(before); } @After(pointCut_()) public void after(){ System.out.println(after); } }

4)bean.xml配置-->引入命名空间(去文档中搜索xmln:aop)

-->开启注解扫描

-->开启注解aop注解

5)测试类App--->这里的返回值一定是接口IUserdao package cn.itcast.aop_anno; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { ApplicationContext ac=new ClassPathXmlApplicationContext(cn/itcast/aop_anno/bean.xml); @Test public void test(){ IUserDao userdao=(IUserDao) ac.getBean(userDao); userdao.save(); } } 测试结果:

\


------------------------------------------深入理解----------------------------------------

1)如果UserDao不实现IUserDao接口

测试类改为:

package cn.itcast.aop_anno; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { ApplicationContext ac=new ClassPathXmlApplicationContext(cn/itcast/aop_anno/bean.xml); @Test public void test(){ UserDao userdao=(UserDao) ac.getBean(userDao); System.out.println(userdao.getClass()); userdao.save(); } } 测试结果:-->返回结果一定是UserDao即是类 不是接口


xml方式实现AOP编程 xml实现AOP编程步骤:

Xml实现aop编程:

1) 引入jar文件 【aop 相关jar, 4个】

2) 引入aop名称空间

3)aop 配置

*配置切面类 (重复执行代码形成的类)

*aop配置

拦截哪些方法 / 拦截到方法后应用通知代码

案例:

IUserDao,UserDao,AOP类同上,--------->只是去掉注解..

1)bean.xml文件的配置

2)测试类App package cn.itcast.aop_xml; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { ApplicationContext ac=new ClassPathXmlApplicationContext(cn/itcast/aop_xml/bean.xml); @Test public void test(){ IUserDao userdao= (IUserDao) ac.getBean(userDao); System.out.println(userdao.getClass()); userdao.save(); } } 运行结果:

\

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:荆州SEO http://jingzhou.raoyu.net

  • 上一篇:.NET世界各成员之间的关系
  • 下一篇:最后一页
  •