基类User:
package com.model; public class User { }
定义接口UserService:
package com.service; import com.model.User; public interface UserService { public void save(User user); public void update(User user); }
定义实现类UserServicImpl:
package com.service.impl; import com.model.User; import com.service.UserService; public class UserServiceImpl implements UserService { @Override public void save(User user) { System.out.println("saved!"); } @Override public void update(User user) { System.out.println("updated!"); } }
创建代理类ServiceProxy:
package com.proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class ServiceProxy implements InvocationHandler { private Object proxyed; public Object createProxyInstance(Object proxyed){ this.proxyed=proxyed; return Proxy.newProxyInstance(proxyed.getClass().getClassLoader(), proxyed.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result=null; System.out.println("Begin Transaction!"); result=method.invoke(proxyed, args); System.out.println("Stop Transaction!"); System.out.println("result = " + result); return result; } }
Test测试类:
package com.test; import com.model.User; import com.proxy.ServiceProxy; import com.service.UserService; import com.service.impl.UserServiceImpl; public class Test { public static void main(String...args) { UserService userServiceA = new UserServiceImpl(); UserService userServiceB = (UserService)new ServiceProxy().createProxyInstance(userServiceA); System.out.println(userServiceA.getClass().getPackage() + "." + userServiceA.getClass().getName()); System.out.println(userServiceB.getClass().getPackage() + "." + userServiceB.getClass().getName()); userServiceA.save(new User()); } }