AOP Practice with cglib
1. Add jar packages to our projects
<!-- commons -->
<dependency org="cglib" name="cglib" rev="2.2"/>
<dependency org="asm" name="asm-all" rev="3.3" />
2. My demo class HelloWorld.java:
package com.sillycat.cglibdemo;
public class HelloWorld {
public static void main(String[] args){
new HelloWorld().sayHello();
}
public void sayHello(){
System.out.println("hello ");
}
}
My proxy class is HellowWorldProxy.java:
package com.sillycat.cglibdemo;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
public class HelloWorldProxy implements MethodInterceptor {
@Override
public Object intercept(Object object, Method arg1, Object[] args,
MethodProxy methodProxy) throws Throwable {
System.out.println(">>>MethodInterceptor start...");
Object result = methodProxy.invokeSuper(object, args);
System.out.println(result);
System.out.println(">>>MethodInterceptor ending...");
return null;
}
public static void main(String[] args) {
HelloWorld proxyTarget = (HelloWorld) createProxy(HelloWorld.class);
proxyTarget.sayHello();
}
public static Object createProxy(Class<?> targetClass) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(targetClass);
enhancer.setCallback(new HelloWorldProxy());
return enhancer.create();
}
}
I can run my demo and get the result on console:
>>>MethodInterceptor start...
hello
null
>>>MethodInterceptor ending...
1. Add jar packages to our projects
<!-- commons -->
<dependency org="cglib" name="cglib" rev="2.2"/>
<dependency org="asm" name="asm-all" rev="3.3" />
2. My demo class HelloWorld.java:
package com.sillycat.cglibdemo;
public class HelloWorld {
public static void main(String[] args){
new HelloWorld().sayHello();
}
public void sayHello(){
System.out.println("hello ");
}
}
My proxy class is HellowWorldProxy.java:
package com.sillycat.cglibdemo;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
public class HelloWorldProxy implements MethodInterceptor {
@Override
public Object intercept(Object object, Method arg1, Object[] args,
MethodProxy methodProxy) throws Throwable {
System.out.println(">>>MethodInterceptor start...");
Object result = methodProxy.invokeSuper(object, args);
System.out.println(result);
System.out.println(">>>MethodInterceptor ending...");
return null;
}
public static void main(String[] args) {
HelloWorld proxyTarget = (HelloWorld) createProxy(HelloWorld.class);
proxyTarget.sayHello();
}
public static Object createProxy(Class<?> targetClass) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(targetClass);
enhancer.setCallback(new HelloWorldProxy());
return enhancer.create();
}
}
I can run my demo and get the result on console:
>>>MethodInterceptor start...
hello
null
>>>MethodInterceptor ending...