AspectJ 编程特性与应用详解
1. 自定义编译消息
在编程过程中,我们常常需要对某些编码实践进行规范,有些编码方式应该被劝阻,而有些则应被完全禁止。AspectJ 提供了一个强大的功能,即指定自定义编译错误和警告。它允许方面(aspect)针对任何可以通过静态确定的切入点(pointcut)所挑选出的连接点(join point)发出警告或错误信息。
例如,当我们定义了一个可重用的 LogService
接口后,可能希望禁止在实现该接口的任何类中调用 System.out.println
。AspectJ 就能实现这样的规则检查。
下面是一个关于线程安全的示例,展示了如何使用自定义编译消息来强制执行设计规则:
public interface ThreadSafe {
public void init(Object context);
public static aspect ThreadSafety{
/* 1
* Selects any field assignments in
* a ThreadSafe class that do not
* occur within init code.
*/
pointcut notWithinInit() :
set(!static * *)
&& within(ThreadSafe+)