package com.yyq.clouds.permision;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import org.junit.Test;
interface Subject{
public void rent();
public void hello(String str);
}
//被代理类
class RealSubject implements Subject
{
@Override
public void rent()
{
System.out.println("I want to rent my house");
}
@Override
public void hello(String str)
{
System.out.println("hello: " + str);
}
}
class DynamicProxy implements InvocationHandler{
private Object subject;
public DynamicProxy(Object subject){
this.subject = subject;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Authority authority = new Authority();
//执行权限对象中的in方法
authority.first();
Object result = method.invoke(subject, args);
authority.last();
return result;
}
}
class Authority {
//第一个拦截方法
public void first() {
System.out.println("------第一个切面方法------");
}
//第二个拦截方法
public void last() {
System.out.println("------最后一个切面方法------");
}
}
public class ProxyTest {
public Object getProxy(Object target) throws Exception {
//创建一个MyInvocationHandler对象
DynamicProxy handler = new DynamicProxy(target);
//创建并返回一个动态代理
return Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), handler);
}
public static void main(String[] args) {
try {
Subject realSubject = new RealSubject();
ProxyTest myProxyFactory=new ProxyTest();
Subject subject = (Subject)myProxyFactory.getProxy(realSubject);
subject.rent();
subject.hello("world");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import org.junit.Test;
interface Subject{
public void rent();
public void hello(String str);
}
//被代理类
class RealSubject implements Subject
{
@Override
public void rent()
{
System.out.println("I want to rent my house");
}
@Override
public void hello(String str)
{
System.out.println("hello: " + str);
}
}
class DynamicProxy implements InvocationHandler{
private Object subject;
public DynamicProxy(Object subject){
this.subject = subject;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Authority authority = new Authority();
//执行权限对象中的in方法
authority.first();
Object result = method.invoke(subject, args);
authority.last();
return result;
}
}
class Authority {
//第一个拦截方法
public void first() {
System.out.println("------第一个切面方法------");
}
//第二个拦截方法
public void last() {
System.out.println("------最后一个切面方法------");
}
}
public class ProxyTest {
public Object getProxy(Object target) throws Exception {
//创建一个MyInvocationHandler对象
DynamicProxy handler = new DynamicProxy(target);
//创建并返回一个动态代理
return Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), handler);
}
public static void main(String[] args) {
try {
Subject realSubject = new RealSubject();
ProxyTest myProxyFactory=new ProxyTest();
Subject subject = (Subject)myProxyFactory.getProxy(realSubject);
subject.rent();
subject.hello("world");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}