当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

aop相关的概念及配置

发表于: 2014-06-15   作者:daysinsun   来源:转载   浏览:
AOP
摘要: 切面(Aspect): 通常在目标方法执行前后需要执行的方法(如事务、日志、权限),这些方法我们封装到一个类里面,这个类就叫切面。 连接点(joinpoint) spring里面的连接点指需要切入的方法,通常这个joinpoint可以作为一个参数传入到切面的方法里面(非常有用的一个东西)。 通知(Advice) 通知就是切面里面方法的具体实现,分为前置、后置、最终、异常环
切面(Aspect):
通常在目标方法执行前后需要执行的方法(如事务、日志、权限),这些方法我们封装到一个类里面,这个类就叫切面。

连接点(joinpoint)
spring里面的连接点指需要切入的方法,通常这个joinpoint可以作为一个参数传入到切面的方法里面(非常有用的一个东西)。

通知(Advice)
通知就是切面里面方法的具体实现,分为前置、后置、最终、异常环绕通知。

切入点(Pointcut)
所谓切入点,通常是指一个表达式,按照包的匹配来切入进去。

目标对象(target)
代理的目标对象。

以下是spring aop的一个实现
先写切面类,代码如下:
public class AopDemo {
	
	public void beforeAdvice(){
		System.out.println("我是前置通知");
	}
	
	/*
	 * 如果目标方法发生异常,则后置通知不会执行
	 */
	public void afterReturnAdvice(){
		System.out.println("我是后置通知");
	}
	
	/*
	 * 如果目标方法发生异常,则最终方法还是会执行
	 */
	public void afterAdvice(JoinPoint joinPoint){
		
		System.out.println(joinPoint.getTarget());//可以获取到目标对象
		System.out.println(joinPoint.getArgs()[0]);//获取目标方法的参数
	
		System.out.println("我是最终通知");
	}
	
	/*
	 * 如果发生异常才执行此方法,否则不执行
	 */
	public void exceptionAdvice(){
		//实际的时候如果发生异常,可以跳转错误页面,也可以发邮件给管理员告知出了异常
		System.out.println("我是异常通知");
	}
	
	public void aroundAdvice(){
		//
		System.out.println("我是环绕通知");
	}

}

然后写业务逻辑类:
public class GoodsImpl {
	
	public void save(Goods goods){
		System.out.println("save goods");
	}
	
	public void delete(Goods goods){
		System.out.println("delete goods");
	}

}


配置文件代码:
<!--业务逻辑类  -->
	<bean id="goodsImpl" class="com.alt.bean.GoodsImpl"/>
	 <!-- 切面 -->
	<bean id="aop" class="com.alt.aop.AopDemo"/>
	 
	 <aop:config>
	 	<aop:aspect ref="aop">
	 	<aop:after method="afterAdvice" pointcut="execution(* com.alt.bean.GoodsImpl.save(..))"/>
	 	</aop:aspect>
	 </aop:config>


最后的测试类:
public class AopTest {
	private static ClassPathXmlApplicationContext context = null;
	private static GoodsImpl goodsImpl = null;
	@BeforeClass
	public static void init(){
		context = new ClassPathXmlApplicationContext("applicationContext-*.xml");
		goodsImpl = (GoodsImpl) context.getBean("goodsImpl");
	}
	@Test
	public void testAop(){
		System.out.println("start");
		Goods goods = new Goods(1, "大米", 23.4);
		goodsImpl.save(goods);
	}

}

以上是一个AOP的一个大致实现。
最后关于切入表达式:
execution()里面的内容
execution( [修饰符]  返回值类型 [类的全限定名.]方法名(参数) )





aop相关的概念及配置

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
这一篇我们要总结的是图(Graph),图可能比我们之前学习的线性结构和树形结构都要复杂,不过没有关系
一、静态代理 参见代码 二、动态代理 参见j2se专题动态代理与反射 三、AoP介绍 根据上例中spring_dy
第三事業群研發工程師 石明崇 前言   物件導向程式設計(以下簡稱:OOP)經過一段時間的演進與發
AOP的概念及在Unit Test上的應用 http://www.dsc.com.tw/newspaper/43/43-2.htm 前言   物件導向
一、前言及相关概念 1.1. 什么是3G、4G 1、第三代移动通信技术(3rd - Generation),速率一般在几
转自: http://www.cnblogs.com/coderzh/archive/2008/09/06/1285500.html XSS又叫CSS (Cross Site
一、 什么是库? 库是程序代码的集合,是共享程序代码的一种方式。根据源代码的公开情况,库可以分
注意:转载请注明出处:http://www.programfish.com/blog/?p=124 SSH 基本概念 SSH 英文全称是secu
定义: 设A,B为集合,用A中元素为第一元素,B中元素为第二元素构成的有序对,所有这样的有序对组成
package jinjieshilie; import java.io.FileReader; import java.io.IOException; public class zif
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号