JavaSE 反射 Part5

原作者: 尚硅谷-佟刚


这里写图片描述

这里写图片描述


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());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值