您的位置:首页 > 编程语言 > Java开发

不使用spring的aop功能实现日志输出

2016-01-04 15:06 495 查看
第一种:

public class TimeBook {

private Logger logger = Logger.getLogger(this.getClass().getName());

//审核数据的相关程序

public void doAuditing(String name){

logger.log(Level.INFO, name + "开始审核数据...");

System.out.println("审核程序");

logger.log(Level.INFO, name + "审核数据结束...");

}

}

//TestHelloWorld.java

package com.gc.test;

import com.gc.action.TimeBook;

public class TestHelloWorld {

public static void main(String[] args){

TimeBook timeBook = new TimeBook();

timeBook.doAuditing("张三");

}

}

第二种:通过面向接口编程实现日志输出

public class TimeBook implements TimeBookInterface {

//审核数据的相关程序

public void doAuditing(String name){

System.out.println("审核程序");

}

}

//TimeBookProxy.java

package com.gc.action;

import org.apache.log4j.Level;

import org.apache.log4j.Logger;

import com.gc.impl.TimeBookInterface;

public class TimeBookProxy {

private Logger logger = Logger.getLogger(this.getClass().getName());

private TimeBookInterface 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);

}

}

public class TestHelloWorld {

public static void main(String[] args){

TimeBookProxy timeBookProxy = new TimeBookProxy(new TimeBook());

timeBookProxy.doAuditing("张三");

}

}

第三种:使用java的代理机制进行日志输出

public class LogProxy implements InvocationHandler{

private Logger logger = Logger.getLogger(this.getClass().getName());

private Object delegate;

//绑定代理对象

public Object bind(Object delegate){

this.delegate = delegate;

return Proxy.newProxyInstance(delegate.getClass().getClassLoader(),

delegate.getClass().getInterfaces(),this);

}

//针对接口编程

public Object invoke(Object proxy,Method 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;

}

}

//TimeBookInterface.java

package com.gc.impl;

//针对接口编程

public interface TimeBookInterface {

public void doAuditing(String name);

}

//TimeBook.java

public class TimeBook implements TimeBookInterface {

//审核数据的相关程序

public void doAuditing(String name){

System.out.println("审核程序");

}

}

//TestHelloWorld.java

public class TestHelloWorld {

public static void main(String[] args){

//实现了对日志类的重用

LogProxy logProxy = new LogProxy();

TimeBookInterface timeBookProxy = (TimeBookInterface)logProxy.bind(new TimeBook());

timeBookProxy.doAuditing("张三");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: