Java平台AOP技术研究
来源:互联网 发布:php 发邮件代码 编辑:程序博客网 时间:2024/06/04 03:58
public aspect AutoLog
{
pointcut publicMethods() : execution(public * org.apache.cactus..*(..));
pointcut logObjectCalls() : execution(* Logger.*(..));
pointcut loggableCalls() : publicMethods() && ! logObjectCalls();
before() : loggableCalls()
{
Logger.entry(thisJoinPoint.getSignature().toString());
}
after() : loggableCalls()
{
Logger.exit(thisJoinPoint.getSignature().toString());
}
}
{
pointcut publicMethods() : execution(public * org.apache.cactus..*(..));
pointcut logObjectCalls() : execution(* Logger.*(..));
pointcut loggableCalls() : publicMethods() && ! logObjectCalls();
before() : loggableCalls()
{
Logger.entry(thisJoinPoint.getSignature().toString());
}
after() : loggableCalls()
{
Logger.exit(thisJoinPoint.getSignature().toString());
}
}
AspectJ语言:
before() : loggableCalls()
{
Logger.entry(thisJoinPoint.getSignature().toString());
}
{
Logger.entry(thisJoinPoint.getSignature().toString());
}
AspectJ语言:
public aspect Timestamp
{
private long ValueObject.timestamp;
public long ValueObject.getTimestamp()
{
return timestamp;
}
public void ValueObject.timestamp()
{
this.timestamp = System.currentTimeMillis();
}
}
{
private long ValueObject.timestamp;
public long ValueObject.getTimestamp()
{
return timestamp;
}
public void ValueObject.timestamp()
{
this.timestamp = System.currentTimeMillis();
}
}
AspectJ语言:
public interface TimestampedObject
{
long getTimestamp();
void timestamp();
}
public aspect Timestamp
{
private long TimestampedObject.timestamp;
public long TimestampedObject.getTimestamp()
{
return timestamp;
}
public void TimestampedObject.timestamp()
{
this.timestamp = System.currentTimeMillis();
}
}
{
long getTimestamp();
void timestamp();
}
public aspect Timestamp
{
private long TimestampedObject.timestamp;
public long TimestampedObject.getTimestamp()
{
return timestamp;
}
public void TimestampedObject.timestamp()
{
this.timestamp = System.currentTimeMillis();
}
}
AspectJ语言:
declare parents: ValueObject || BigValueObject implements TimestampedObject;
Java语言:
public interface Interceptor
{
public String getName();
public InvocationResponse invoke(Invocation invocation) throws Throwable;
}
{
public String getName();
public InvocationResponse invoke(Invocation invocation) throws Throwable;
}
Java语言:
import org.jboss.aop.*;
import java.lang.reflect.*;
public class TracingInterceptor implements Interceptor
{
public String getName()
{
return TracingInterceptor;
}
public InvocationResponse invoke(Invocation invocation) throws Throwable
{
String message = null;
if (invocation.getType() == InvocationType.METHOD)
{
Method method = MethodInvocation.getMethod(invocation);
message = method: + method.getName();
}
else
{
if (invocation.getType() == InvocationType.CONSTRUCTOR)
{
Constructor c = ConstructorInvocation.getConstructor(invocation);
message = constructor: + c.toString();
}
else
{
// 不对字段作处理,太繁琐;
return invocation.invokeNext();
}
System.out.println(Entering + message);
}
// 继续。调用真正的方法或者构造函数
InvocationResponse rsp = invocation.invokeNext();
System.out.println(Leaving + message);
return rsp;
}
}
import java.lang.reflect.*;
public class TracingInterceptor implements Interceptor
{
public String getName()
{
return TracingInterceptor;
}
public InvocationResponse invoke(Invocation invocation) throws Throwable
{
String message = null;
if (invocation.getType() == InvocationType.METHOD)
{
Method method = MethodInvocation.getMethod(invocation);
message = method: + method.getName();
}
else
{
if (invocation.getType() == InvocationType.CONSTRUCTOR)
{
Constructor c = ConstructorInvocation.getConstructor(invocation);
message = constructor: + c.toString();
}
else
{
// 不对字段作处理,太繁琐;
return invocation.invokeNext();
}
System.out.println(Entering + message);
}
// 继续。调用真正的方法或者构造函数
InvocationResponse rsp = invocation.invokeNext();
System.out.println(Leaving + message);
return rsp;
}
}
<?xml version="1.0" encoding="UTF-8">
<aop>
<interceptor-pointcut class="BusinessObject">
<interceptors>
<interceptor class="TracingInterceptor" />
</interceptors>
</interceptor-pointcut>
</aop>
<aop>
<interceptor-pointcut class="BusinessObject">
<interceptors>
<interceptor class="TracingInterceptor" />
</interceptors>
</interceptor-pointcut>
</aop>
<?xml version="1.0" encoding="UTF-8">
<aop>
<class-metadata group="tracing" class=" BusinessObject ">
<method name="(get.*)|(set.*)">
<filter>true</filter>
</method>
<method name="main">
<filter>true</filter>
</method>
</class-metadata>
</aop>
<aop>
<class-metadata group="tracing" class=" BusinessObject ">
<method name="(get.*)|(set.*)">
<filter>true</filter>
</method>
<method name="main">
<filter>true</filter>
</method>
</class-metadata>
</aop>
Java语言:
public class TracingInterceptor implements Interceptor
{
//getName()方法略;
public InvocationResponse invoke(Invocation invocation) throws Throwable
{
String filter=(String)invocation.getMetaData(tracing, filter);
if (filter != null && filter.equals(true))
return invocation.invokeNext();
//后面的代码略;
}
}
{
//getName()方法略;
public InvocationResponse invoke(Invocation invocation) throws Throwable
{
String filter=(String)invocation.getMetaData(tracing, filter);
if (filter != null && filter.equals(true))
return invocation.invokeNext();
//后面的代码略;
}
}
Java语言:
public interface Tracing
{
void enableTracing();
void disableTracing();
}
{
void enableTracing();
void disableTracing();
}
Java语言:
import org.jboss.aop.Advised;
public class TracingMixin implements Tracing
{
Advised advised;
Public TracingMixin(Object obj)
{
this.advised = (Advised)obj;
}
public void enableTracing()
{
advised._getInstanceAdvisor().getMetaData().addMetaData("tracing", "filter",true);
}
public void disableTracing()
{
advised._getInstanceAdvisor().getMetaData().addMetaData("tracing", "filter",false);
}
}
public class TracingMixin implements Tracing
{
Advised advised;
Public TracingMixin(Object obj)
{
this.advised = (Advised)obj;
}
public void enableTracing()
{
advised._getInstanceAdvisor().getMetaData().addMetaData("tracing", "filter",true);
}
public void disableTracing()
{
advised._getInstanceAdvisor().getMetaData().addMetaData("tracing", "filter",false);
}
}
XML语言:
<?xml version="1.0" encoding="UTF-8">
<aop>
<introduction-pointcut class="BusinessObject">
<mixin>
<interfaces>Tracing</interfaces>
<class>TracingMixin</class>
<construction>new TracingMixin(this)</construction>
</mixin>
</introduction-pointcut>
</aop>
<aop>
<introduction-pointcut class="BusinessObject">
<mixin>
<interfaces>Tracing</interfaces>
<class>TracingMixin</class>
<construction>new TracingMixin(this)</construction>
</mixin>
</introduction-pointcut>
</aop>
Java语言:
public class BusinessObject
{
public BusinessObject () {}
public void helloWorld() { System.out.println(Hello World!); }
public static void main(String[] args)
{
BusinessObject bo = new BusinessObject ();
Tracing trace = (Tracing)this;
bo.helloWorld();
System.out.println("Turn off tracing.");
trace.disableTracing();
bo.helloWorld();
System.out.println("Turn on tracing.");
trace.enableTracing();
bo.helloWorld();
}
}
{
public BusinessObject () {}
public void helloWorld() { System.out.println(Hello World!); }
public static void main(String[] args)
{
BusinessObject bo = new BusinessObject ();
Tracing trace = (Tracing)this;
bo.helloWorld();
System.out.println("Turn off tracing.");
trace.disableTracing();
bo.helloWorld();
System.out.println("Turn on tracing.");
trace.enableTracing();
bo.helloWorld();
}
}
Tracing trace = (Tracing)this;
Java语言:
public interface Pointcut
{
ClassFilter getClassFilter();
MethodMatcher getMethodMatcher();
}
{
ClassFilter getClassFilter();
MethodMatcher getMethodMatcher();
}
Java语言:
public interface ClassFilter
{
boolean matches(Class clazz);
}
{
boolean matches(Class clazz);
}
Java语言:
public interface MethodMatcher
{
boolean matches(Method m, Class targetClass);
boolean matches(Method m, Class targetClass, Object[] args);
boolean isRuntime();
}
{
boolean matches(Method m, Class targetClass);
boolean matches(Method m, Class targetClass, Object[] args);
boolean isRuntime();
}
XML语言:
<bean id="settersAndAbsquatulatePointcut"
class="org.springframework.aop.support.RegexpMethodPointcut">
<property name="patterns">
<list>
<value>.*get.*</value>
<value>.*absquatulate</value>
</list>
</property>
</bean>
class="org.springframework.aop.support.RegexpMethodPointcut">
<property name="patterns">
<list>
<value>.*get.*</value>
<value>.*absquatulate</value>
</list>
</property>
</bean>
XML语言:
<bean id="myPointcutAdvisor"class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<ref local="MyInterceptor" />
</property>
<property name="patterns">
<list>
<value>.*save.*</value>
<value>.*do.*</value>
</list>
</property>
</bean>
<property name="advice">
<ref local="MyInterceptor" />
</property>
<property name="patterns">
<list>
<value>.*save.*</value>
<value>.*do.*</value>
</list>
</property>
</bean>
Java语言:
public interface BusinessObject
{
public void save();
}
public class BusinessObjectImpl implements BusinessObject
{
public void save()
{
System.out.println("saving domain object......");
}
}
{
public void save();
}
public class BusinessObjectImpl implements BusinessObject
{
public void save()
{
System.out.println("saving domain object......");
}
}
Java语言:
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class LockInterceptor implements MethodInterceptor
{
public Object invoke(MethodInvocation invocation) throws Throwable
{
// TODO Auto-generated method stub
lock();
Object ret= invocation.proceed();
unlock();
return ret;
}
private void lock()
{
System.out.println("lock domain object...");
}
private void unlock()
{
System.out.println("unlock domain object...");
}
}
import org.aopalliance.intercept.MethodInvocation;
public class LockInterceptor implements MethodInterceptor
{
public Object invoke(MethodInvocation invocation) throws Throwable
{
// TODO Auto-generated method stub
lock();
Object ret= invocation.proceed();
unlock();
return ret;
}
private void lock()
{
System.out.println("lock domain object...");
}
private void unlock()
{
System.out.println("unlock domain object...");
}
}
XML语言:
<bean id="MyInterceptor" class="test.aop.spring.LockInterceptor"/>
XML语言:
<bean id="myAOPProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>test.aop.spring.BusinessObject</value>
</property>
<property name="target">
<ref local="impl" />
</property>
<property name="interceptorNames">
<value>myPointcutAdvisor</value>
</property>
</bean>
<bean id="impl" class="test.aop.spring.BusinessObjectImpl"/>
<property name="proxyInterfaces">
<value>test.aop.spring.BusinessObject</value>
</property>
<property name="target">
<ref local="impl" />
</property>
<property name="interceptorNames">
<value>myPointcutAdvisor</value>
</property>
</bean>
<bean id="impl" class="test.aop.spring.BusinessObjectImpl"/>
Java语言:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class App
{
private BusinessObject bo = null;
public static void main(String[] args)
{
ApplicationContext ctx=new FileSystemXmlApplicationContext("Bean.xml");
bo= (BusinessObject) ctx.getBean("myAOPProxy");
bo.save();
}
}
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class App
{
private BusinessObject bo = null;
public static void main(String[] args)
{
ApplicationContext ctx=new FileSystemXmlApplicationContext("Bean.xml");
bo= (BusinessObject) ctx.getBean("myAOPProxy");
bo.save();
}
}
Java语言:
public interface IntroductionInterceptor extends MethodInterceptor
{
boolean implementsInterface(Class intf);
}
{
boolean implementsInterface(Class intf);
}
Java语言:
public interface InterceptionIntroductionAdvisor extends InterceptionAdvisor
{
ClassFilter getClassFilter();
IntroductionInterceptor getIntroductionInterceptor();
Class[] getInterfaces();
}
{
ClassFilter getClassFilter();
IntroductionInterceptor getIntroductionInterceptor();
Class[] getInterfaces();
}
Java语言:
public interface Tracing
{
void enableTracing();
void disableTracing();
boolean enabled();
}
{
void enableTracing();
void disableTracing();
boolean enabled();
}
Java语言:
public class TracingMixin extends DelegatingIntroductionInterceptor implements Tracing
{
private boolean enabled;
public void enableTracing ()
{
this.enabled = true;
}
public void disableTracing ()
{
this. enabled = false;
}
public boolean enabled()
{
return this.enabled;
}
public Object invoke(MethodInvocation invocation) throws Throwable
{
return super.invoke(invocation);
}
}
{
private boolean enabled;
public void enableTracing ()
{
this.enabled = true;
}
public void disableTracing ()
{
this. enabled = false;
}
public boolean enabled()
{
return this.enabled;
}
public Object invoke(MethodInvocation invocation) throws Throwable
{
return super.invoke(invocation);
}
}
Java语言:
public class TracingMixinAdvisor extends DefaultIntroductionAdvisor
{
public TracingMixinAdvisor() {
super(new TracingMixin(),Tracing.class);
}
}
{
public TracingMixinAdvisor() {
super(new TracingMixin(),Tracing.class);
}
}
0 0
- Java平台AOP技术研究
- Java平台AOP技术研究
- Java平台AOP技术研究
- Java平台AOP技术研究
- Java平台AOP技术研究
- Java平台AOP技术研究
- Java平台AOP技术研究
- .Net平台AOP技术研究
- .Net平台AOP技术研究
- .Net平台AOP技术研究
- .Net平台AOP技术研究
- .Net平台AOP技术研究
- .Net平台AOP技术研究
- .Net平台AOP技术研究
- .Net平台AOP技术研究_4
- AOP技术介绍--(.Net平台AOP技术研究)
- AOP技术介绍--(.Net平台AOP技术研究)
- AOP技术研究
- java 冒泡排序
- OSPF的LSA类型
- IOS NSRange用法
- 在JVM中,新生代和旧生代有何区别?GC的回收方式有几种?server和client有和区别?
- 项目二-体验常成员函数
- Java平台AOP技术研究
- HDU 2243 考研路茫茫——单词情结(AC自动机+矩阵幂)
- zookeeper分布式安装
- Hibernate整合C3P0实现连接池
- Unique Binary Search Trees
- 谷歌浏览器javascript调试教程
- python暴力破解含密码的zip压缩文件
- Windows7+WDK+VS2010+VisualDDK驱动开发环境搭建(菜鸟的经验)
- Sql Server 保留几位小数的两种做法