JavaSE 反射 Part5

来源:互联网 发布:word2007软件 编辑:程序博客网 时间:2024/06/06 15:02

原作者: 尚硅谷-佟刚


这里写图片描述

这里写图片描述


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());    }}
原创粉丝点击