1、第一个创建方法,原生jdk提供的Proxy
原生jdk提供了proxy.newProxyInstance()方法,来设置代理类,具体代理如下:
原生的jdk必须提供接口 这里定义了IUserService:
package com.gaojian.aop1;
import java.util.List;
public interface IUserService <T>{
List<T> getAllUser();
boolean saveUser(T obj);
boolean deleteUser(int uid);
boolean updateUser(T obj);
}
以下是,接口的实现类:
package com.gaojian.aop1;
import java.util.List;
public class UserServiceImpl implements IUserService<Object> {
@Override
public List<Object> getAllUser() {
System.out.println("======getAllUser()=======");
return null;
}
@Override
public boolean saveUser(Object object) {
System.out.println("======saveUser()=======");
return false;
}
@Override
public boolean deleteUser(int uid) {
System.out.println("======deleteUser(int uid)=======");
return false;
}
@Override
public boolean updateUser(Object obj) {
System.out.println("======updateUser(Object obj)=======");
return false;
}
}
以下代码是切面类,负责代码的拦截
package com.gaojian.aop1;
/**
* 切面类,负责拦截方法,并且植入代码
*/
public class MyAspect {
public void before(){
System.out.println("========before========");
}
public void after(){
System.out.println("========after==============");
}
}
最重点的代码,就是设置代理类对象
package com.gaojian.aop1;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* 一个代理类
*/
public class UserFactory {
/**
* 返回一个父接口类型
* @return
*/
public static IUserService getUserService(){
//创建实现类对象,并且在下面传入,以开始被代理类给代理
IUserService us = new UserServiceImpl();
//创建切面类,给被代理类植入需求代码
MyAspect ma = new MyAspect();
IUserService ius = (IUserService) Proxy.newProxyInstance(us.getClass().getClassLoader(), us.getClass().getInterfaces(), new InvocationHandler() {
/**
*
* @param proxy 被代理的对象,us
* @param method 被代理的方法
* @param args 被代理方法的参数列表
* @return 每个方法最终返回值
* @throws Throwable
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
ma.before();
Object obj = method.invoke(us,args);
ma.after();
return obj;
}
});
return ius;
}
}
以下是测试类
package com.gaojian.aop1;
import org.junit.Test;
public class TestAOP1 {
@Test
public void test(){
IUserService us = UserFactory.getUserService();
System.out.println(us.getAllUser());
System.out.println(us.saveUser(new Object()));
System.out.println(us.deleteUser(1));
System.out.println(us.updateUser(new Object()));
}
}