AspectJ 入门篇
来源:互联网 发布:脸部干燥怎么补水 知乎 编辑:程序博客网 时间:2024/06/06 02:17
AspectJ是AOP领域的较早的实现。AspectJ是在java语言基础上进行扩充的一门语言,扩充了自定义的关键字;并提供了自己的编译器ajc;在本文和接下来的系列文章中,将会与大家共同学习AspectJ这么新的AOP语言。下面的一个例子,是学习AspectJ的典型例子。如果是第一次看到该段代码,可能看不懂,不过没关系;在接下来的系列文章中,我将和大家共同学习。
通常我们在记录日志时候,都是硬编码在我们的业务代码中,下面的一个方面提供了当在应用中发生异常的时候,可以自动的在方面记录日志;而不用在业务代码中硬编码。随着日志规则的变化或者需要增加或者删除日志记录的情况,我们可以通过方面来实现松耦合!
在例子的代码中,基本上都作了比较完整的注释,将不会在文档中对例子做过多的介绍。
/** *//**
*
*/
package com.liuxiang.aspectj;
import org.apache.log4j.Logger;
/** *//**
*
* 日志记录和跟踪是 AOP 的经典学习练习。
*
* 方面是对日志记录和跟踪的传统方法的重大改进。在某些情况下 编写方面来解决这些普通问题很简单。
* 对于比较复杂的情况,则需要对象和方面之间的更多合作,这最好在稍后的学习阶段去尝试。
* 跟踪方面可以帮助初学者了解不熟悉的程序部分如何工作,并在调试间歇出现的问题时获得更深的理解。
*
* 每当程序从模型调用中返回一个异常时,该方面就记录错误。
* 这种方法对于跟踪 “吞下” 异常(即,捕获异常却不处理)的代码中的异常也十分有用。
*
* LogModelExceptions.aj
* com.liuxiang.aspectj.a
* Aspectj5Project
* @author liuxiang mailto:juxtapose@163.com
* 2007-7-22 上午10:15:27
*
*/
public aspect LogExceptions ...{
private Logger logger = Logger.getLogger("LogModelExceptions");
/** *//**
* 切入点:包com.liuxiang及子包中所有公共方法的调用
*/
public pointcut recordlog():call(public * com.liuxiang..*(..));
public pointcut recordlog1():call(public * com.liuxiang..*(..));
/** *//**
* 在切入点recordlog()中所有发生异常的地方,将会触发如下的after操作,记录日志
*/
after() throwing(Exception e):recordlog()...{
logger.error("Error in calling method", e);
}
}
*
*/
package com.liuxiang.aspectj;
import org.apache.log4j.Logger;
/** *//**
*
* 日志记录和跟踪是 AOP 的经典学习练习。
*
* 方面是对日志记录和跟踪的传统方法的重大改进。在某些情况下 编写方面来解决这些普通问题很简单。
* 对于比较复杂的情况,则需要对象和方面之间的更多合作,这最好在稍后的学习阶段去尝试。
* 跟踪方面可以帮助初学者了解不熟悉的程序部分如何工作,并在调试间歇出现的问题时获得更深的理解。
*
* 每当程序从模型调用中返回一个异常时,该方面就记录错误。
* 这种方法对于跟踪 “吞下” 异常(即,捕获异常却不处理)的代码中的异常也十分有用。
*
* LogModelExceptions.aj
* com.liuxiang.aspectj.a
* Aspectj5Project
* @author liuxiang mailto:juxtapose@163.com
* 2007-7-22 上午10:15:27
*
*/
public aspect LogExceptions ...{
private Logger logger = Logger.getLogger("LogModelExceptions");
/** *//**
* 切入点:包com.liuxiang及子包中所有公共方法的调用
*/
public pointcut recordlog():call(public * com.liuxiang..*(..));
public pointcut recordlog1():call(public * com.liuxiang..*(..));
/** *//**
* 在切入点recordlog()中所有发生异常的地方,将会触发如下的after操作,记录日志
*/
after() throwing(Exception e):recordlog()...{
logger.error("Error in calling method", e);
}
}
这个例子中用到了AspectJ的部分的关键字和名词:方面(Aspect)、切入点、连接点、通知等。将会在下篇文章中给大家一一介绍。
- AspectJ 入门篇
- aspectj 入门
- AspectJ快速入门
- Spring AOP @AspectJ 入门实例
- Spring AOP @AspectJ 入门实例
- Spring Aop入门之Aspectj
- Spring AOP @AspectJ 入门实例
- Spring AOP @AspectJ 入门实例
- Spring AOP @AspectJ 入门实例
- AspectJ
- aspectJ
- AspectJ
- AspectJ
- AspectJ
- AspectJ
- AspectJ
- AspectJ
- AspectJ
- JAVA控制台输出System.out.print
- Erlang并发编程-目录
- ubuntu 学习笔记
- ejb商务组件
- 矩阵相乘的算法
- AspectJ 入门篇
- 蒹葭
- ejb在商务应用中的作用
- 如何在 Web 服务器上设置 SSL
- 计算机网络
- Java精华积累:初学者都应该搞懂的问题
- 设计自己的Annotation
- 如何使用来自 ASP.NET 的客户端证书调用 Web 服务
- singelton模式