静态代理:代理类在程序运行前已经将代码编写在程序中,称为静态代理。代理类通过实现与被代理类相同的接口,并在类中维护一个被代理对象。通过构造器塞入被代理对象,赋值给代理对象,进而执行代理对象实现的接口方法,完成前拦截,后拦截等所需的业务功能。
静态代理示例代码如下
首先定义一个接口
package com.staticproxy.service;
public interface Subject {
void proxtMethod();
}
定义被代理类,实现接口
package com.staticproxy.service.impl;
import com.staticproxy.service.Subject;
/**
* 被代理类
* @author Administrator
*/
public class AgentTarget implements Subject {
@Override
public void proxtMethod() {
System.out.println("被代理的方法执行了");
}
}
定义代理类,实现与被代理类同一个接口
package com.staticproxy.service.impl;
import com.staticproxy.service.Subject;
/**
* 代理类
* @author Administrator
*/
public class Agent implements Subject {
private AgentTarget agentTarget;
//通过构造函数传入被代理类对象
public Agent(AgentTarget agentTarget) {
this.agentTarget = agentTarget;
}
@Override
public void proxtMethod() {
System.out.println("before");
try {
agentTarget.proxtMethod();
}catch (Exception ex){
System.out.println("ex:" + ex.getMessage());
throw ex;
}finally {
System.out.println("after");
}
}
}
测试类
package com.staticproxy;
import com.staticproxy.service.Subject;
import com.staticproxy.service.impl.Agent;
import com.staticproxy.service.impl.AgentTarget;
public class StaticProxyMain {
public static void main(String[] args) {
Subject subject = new Agent(new AgentTarget());
subject.proxtMethod();
}
}
运行如下