动态代理
public class StarHandler implements InvocationHandler{
Star realStar;
public StarHandler(Star realStar) {
this.realStar = realStar;
}
Star realStar;
public StarHandler(Star realStar) {
this.realStar = realStar;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object obj=null;
System.out.println("面谈");
System.out.println("签合同");
//核心代码
if(method.getName().equals("sing"))
{
obj=method.invoke(realStar, args);
}
System.out.println("收尾款");
return obj;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object obj=null;
System.out.println("面谈");
System.out.println("签合同");
//核心代码
if(method.getName().equals("sing"))
{
obj=method.invoke(realStar, args);
}
System.out.println("收尾款");
return obj;
}
}
public interface Star {
/**
* 面谈
*/
void confer();
/**
* 签合同
*/
void signContract();
/**
* 唱歌
*/
void sing();
/**
* 收尾款
*/
void coleectMoney();
}
/**
* 面谈
*/
void confer();
/**
* 签合同
*/
void signContract();
/**
* 唱歌
*/
void sing();
/**
* 收尾款
*/
void coleectMoney();
}
public class RealStar implements Star {
private String name;
public RealStar(String name) {
this.name = name;
}
@Override
public void sing() {
System.out.println(this.name +"唱歌");
}
public String getName() {
return name;
}
private String name;
public RealStar(String name) {
this.name = name;
}
@Override
public void sing() {
System.out.println(this.name +"唱歌");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void confer() {
System.out.println("RealStar.confer()");
}
@Override
public void signContract() {
System.out.println("RealStar.signContract()");
}
@Override
public void coleectMoney() {
System.out.println("RealStar.coleectMoney()");
}
this.name = name;
}
@Override
public void confer() {
System.out.println("RealStar.confer()");
}
@Override
public void signContract() {
System.out.println("RealStar.signContract()");
}
@Override
public void coleectMoney() {
System.out.println("RealStar.coleectMoney()");
}
}
public class Client {
public static void main(String[] args) {
Star realStar =new RealStar("Jay");
StarHandler handler=new StarHandler(realStar);
Star proxy=(Star) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[] {Star.class},handler );
proxy.sing();
}
}
public static void main(String[] args) {
Star realStar =new RealStar("Jay");
StarHandler handler=new StarHandler(realStar);
Star proxy=(Star) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[] {Star.class},handler );
proxy.sing();
}
}
解析动态代理过程
![](https://img2018.cnblogs.com/blog/1740093/201908/1740093-20190810172652815-1801332019.png)