IUserService.java
package com.qfwh.app01;
import java.util.List;
public interface IUserService<T> {
/***
* 获取
*
*/
List<T> getAllUser();
/**
* 保存用户
*/
Boolean saveUser(T user);
/**
* 删除
*
*/
boolean deleteUser(int uid);
/**
* 跟新
*/
boolean updateUser(T obj);
}
UserServiceImpl.java
package com.qfwh.app01;
import java.util.ArrayList;
import java.util.List;
public class UsrServiceImpl implements IUserService {
@Override
public List<Object> getAllUser() {
System.out.println("----------getAllUser--------------");
return new ArrayList<>();
}
@Override
public Boolean saveUser(Object user) {
System.out.println("----------saveUser--------------");
return true;
}
@Override
public boolean deleteUser(int uid) {
System.out.println("----------deleteUser--------------");
return false;
}
@Override
public boolean updateUser(Object obj) {
System.out.println("----------updateUser--------------");
return true;
}
}
Myaspect.java
package com.qfwh.app01;
public class MyAspect {
public void before(){ System.out.println("***************before*************"); }
public void after(){ System.out.println("***************after*************"); }
}
UserFactory.java
package com.qfwh.app01;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class UserFactory {
public static IUserService getUserService(){
IUserService us = new UsrServiceImpl();
MyAspect ma = new MyAspect();
/**
*
* 使用Proxy类的静态方法newProxyInstance来实现对于目标对象us的代理
* 目的是在原本us可以做的事情之前和之后可以做额外的事情
*
*/
IUserService ius = (IUserService) Proxy.newProxyInstance(UserFactory.class.getClassLoader(), us.getClass().getInterfaces(), new InvocationHandler() {
/**
* 代理对象调用的回掉方法
* @param proxy 代理对象
* @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;
}
}
testAPP01.java
import com.qfwh.app01.IUserService;
import com.qfwh.app01.UserFactory;
import com.qfwh.app01.UsrServiceImpl;
import org.junit.Test;
public class testAPP01 {
@Test
public void get(){
IUserService us = new UsrServiceImpl();
us.getAllUser();
us.deleteUser(1);
us.updateUser(new Object());
us.saveUser(new Object());
System.out.println("----------------------------");
IUserService us2 = UserFactory.getUserService();
us2.getAllUser();
us2.deleteUser(2);
us2.updateUser(new Object());
us2.saveUser(new Object());
}
}