动态代理

来源:互联网 发布:淘宝酷动城怎么加入 编辑:程序博客网 时间:2024/05/21 08:01
public class Person {
    private String name;
    private Integer id;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    
    public Person(Integer id, String name) {
        super();
        this.id = id;
        this.name = name;        
    }
    public Person() {
        
    }
    
    @Override
    public String toString() {
        return "Person [name=" + name + ", id=" + id + "]";
    }

}

//抽象接口

public interface Service {
    
    void add(Person person);
    void delete(Integer id);
    void update(Person person);

}

//服务类

public class ServiceI implements Service {

    private static Map<Integer,Person> persons
       =new HashMap<Integer, Person>();
    public static Map<Integer, Person> getpersons() {
        return persons;
    }
    public ServiceI() {
        persons.put(1, new Person(1001, "aaa"));
        persons.put(2, new Person(1002, "bbb"));
    }
    @Override
    public void add(Person person) {
        persons.put(person.getId(), person);

    }

    @Override
    public void delete(Integer id) {
        if (id==1) {
            throw new RuntimeException("1不能被成删除");
        }
        persons.remove(id);

    }

    @Override
    public void update(Person person) {
        persons.put(person.getId(), person);

    }

}

//代理类

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;
    }

}


测试类

public class TestProxyTest {

    @Test    
    public void testPersonService() {
        Service target=new ServiceI();
        Service proxy=new PersonServiceProxy(target).getPersonServiceProxy();
        System.out.println(ServiceI.getpersons());
        proxy.add(new Person(1005, "ccc"));
        System.out.println(ServiceI.getpersons());
        
        proxy.delete(1);
        System.out.println(ServiceI.getpersons());
    }

}


0 0
原创粉丝点击