(使用代理,在代理时加入自己的操作)
属性文件
log4j.properties
#rootlogger
log4j.rootLogger=INFO,A1
#1.ConsoleAppender
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p[%t] %-17c{2}(%13F:%L) %3x-%n%m%n
1.接口IService
public abstract interface IService {
public boolean getService(String str);
}
2.类ServiceHander 切面
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import org.apache.log4j.Logger;
public class ServiceHander implements InvocationHandler {
Logger log = Logger.getLogger(ServiceHander.class);
private Object delegate;
public ServiceHander(Object delegate) {
this.delegate = delegate;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
log.info("======== before invoke =====");
boolean flg = (Boolean) method.invoke(delegate, args);
if(flg){
log.info("==== get service success===");
}else{
log.info("=== get service faile");
}
log.info("after invoke");
return method.invoke(this.delegate, args);
}
}
3.类ServiceImp
public class ServiceImp implements IService{
public boolean getService(String str) {
System.out.println("================call service ======== ");
System.out.println("Result is " + str);
return true;
}
}
4.使用Main
import java.lang.reflect.Proxy;
public class Main {
public static void main(String[] args) {
ServiceImp service = new ServiceImp();
ServiceHander handler = new ServiceHander(service);
IService proxy = (IService) Proxy.newProxyInstance(service.getClass().getClassLoader(),
service.getClass().getInterfaces(), handler);
proxy.getService("OK");
}
}