通過面向接口編程實現日志輸出
(1)建立一個接口TimeBookInterface,代碼如下
/*******TimeBookInterface.java********/
package com.gc.dao;
public interface TimeBookInterface{
public void doAuditing(String name);
}
(2)編寫接口實現類,代碼如下
/*******TimeBook.java********/
package com.gc.dao.impl;
public class TimeBook implements TimeBookInterface{
public void doAuditing(String name){
//審查數據的相關程序
......
}
}
(3)編寫一個代理類,用來實現日志輸出,其代碼如下
/*******TimeBookProxy.java********/
package com.gc.dao.impl;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
public class TimeBookProxy{
private Logger logger = Logger.getLogger(this.getClass().getName());
private TimeBookInterface timeBookInterface;
public TimeBookProxy(TimeBookInterface timeBookInterface){
this.timeBookInterface = timeBookInterface;
}
//實際業務處理
public void doAuditing(String name){
logger.log(Level.INFO,name+"開始審核數據");
timeBookInterface.doAuditing(name);
logger.log(Level.INFO,name+"審核數據結束");
}
}
(4)編寫測試代碼類
......
public static void main(String[] args){
//針對接口進行編程
TimeBookProxy timeBookProxy = new TimeBookProxy(new TimeBook());
timeBookProxy.doAuditing("張三");
}
使用java的代理機制進行日志輸出
(1)編寫一個日志信息的代理類LogProxy,這個代理類實現了接口InvocationHandler,
可以對任何接口實現日志信息的輸出.其代理如下
package com.gc.dao;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
//代理類實現了接口InvocationHandler
public class LogProxy implements InvocationHandler{
private Logger logger = Logger.getLogger(this.getClass().getName());
private Object delegate;
//綁定對象
public Object bing(Object delegate){
this.delegate = delegate;
return Proxy.new ProxyInstance(delegate.getClass().getClassLoader(),delegate.getClass().getInterfaces(),this);
}
//針對接口編程
public Object invoke(Object proxy,Mehtod method,Object[] args)throws Throwable{
Object result = null;
try{
//在方法調用前后進行日志輸出
logger.log(Level.INFO,args[0] + "開始審核數據");
result = method.invoke(delegate,args);
logger.log(Level.INFO,args[0] + "審核數據結束");
}
catch(Exception e){
logger.log(Level.INFO,e.toString());
}
return result;
}
}
(2)建立一個接口TimeBookInterface,代碼如下
/*******TimeBookInterface.java********/
package com.gc.dao;
public interface TimeBookInterface{
public void doAuditing(String name);
}
(3)編寫接口實現類,代碼如下
/*******TimeBook.java********/
package com.gc.dao.impl;
public class TimeBook implements TimeBookInterface{
public void doAuditing(String name){
//審查數據的相關程序
......
}
}
(4)編寫測試代碼類
......
public static void main(String[] args){
//實現了對日志類的重用
LogProxy logProxy = new LogProxy();
TimeBookInterface timeBookInterface = (TimeBookInterface)logProxy.bind(new TimeBook());
timeBookProxy.doAuditing("張三");
}
代碼來自spring從入門到精通一書
posted on 2007-08-25 14:21
Ke 閱讀(575)
評論(0) 編輯 收藏 所屬分類:
spring