原作者: 尚硅谷-佟刚
package com.atweihai.reflection.proxy;
import java.util.HashMap;
import java.util.Map;
public class ServiceImpl implements Service {
private static Map<Integer,Person> persons=
new HashMap<Integer,Person>();
public static Map<Integer, Person> getPersons() {
return persons;
}
public ServiceImpl() {
persons.put(1001, new Person(1001,"AA"));
persons.put(1002, new Person(1002,"BB"));
}
@Override
public void addNew(Person person) {
persons.put(person.getId(), person);
}
@Override
public void delete(Integer id) {
if(id==1001){
throw new RuntimeException("1001 不能被删除!");
}
persons.remove(id);
}
@Override
public void update(Person person) {
persons.put(person.getId(), person);
}
}
package com.atweihai.reflection.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class PersonServiceProxy {
private Service target=null;
public PersonServiceProxy(Service target) {
this.target = target;
}
public Service getPersonServiceProxy(){
Service proxy=(Service) Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("开启事务");
try {
Object result=method.invoke(target, args);
System.out.println("提交事务");
return result;
} catch (Exception e) {
e.printStackTrace();
System.out.println("回滚事务");
}
return null;
}
});
return proxy;
}
}
package com.atweihai.reflection.proxy;
import org.junit.Test;
public class ProxyTest {
@Test
public void testPersonService(){
Service target=new ServiceImpl();
Service proxy=new PersonServiceProxy(target).getPersonServiceProxy();
System.out.println(ServiceImpl.getPersons());
proxy.addNew(new Person(1005,"CC"));
System.out.println(ServiceImpl.getPersons());
proxy.delete(1001);
System.out.println(ServiceImpl.getPersons());
proxy.update(new Person(1002,"MM"));
System.out.println(ServiceImpl.getPersons());
}
}