一、静态代理:
//业务接口:本接口中的业务方法要被代理增强
public interface ISomeService {
String doFirst();
void doSeconde();
}
//目标类:代理类要增强的类
public class SomeServiceImpl implements ISomeService {
@Override
public String doFirst() {
System.out.println("执行doFirst()方法");
return "abcde";
}
@Override
public void doSeconde() {
System.out.println("执行doSeconde()方法");
}
}
接下来写一个静态代理类,用来增强方法:
public class ServiceProxy implements ISomeService {//实现同一个接口
private ISomeService target;//生成目标对象
public ServiceProxy() {
}
public ServiceProxy(ISomeService target) {
super();
this.target = target;
}
//对要增强的方法增强
@Override
public String doFirst() {
target = new SomeServiceImpl();
//调用目标对象的目标方法
String result = target.doFirst();
// 增强:将目标方法返回的字母全大写
result = result.toUpperCase();
return result;
}
@Override
public void doSeconde() {
target.doSeconde();
}
}
测试:
public class MyTest {
public static void main(String[] args) {
ISomeService target = new SomeServiceImpl();//生成目标对象
ISomeService service = new ServiceProxy(target);//生成代理对象
String result = service.doFirst();
String reslut1 = target.doFirst();
System.out.println(result);//增强方法1
System.out.println(reslut1);//不增强方法1,写法是比较统一的
service.doSeconde();
target.doSeconde();
}
}
结果:
执行doFirst()方法
执行doFirst()方法
ABCDE
abcde
执行doSeconde()方法
执行doSeconde()方法
通过代理的的方法已经被增强