您的位置:首页 > 其它

EIA/TIA布线标准(568A、568B)

2013-04-17 15:36 281 查看
Spring 的精华就是IOC
AOP,主要通过反射实现。 

当需要为多个不具有继承层次的对象引入同一个公共行为的时候,例如记录日志,安全检查等等。如果考虑用OOP的思想进行设计,需要为每一个对象实现相同功能的记录日志或者安全检查的方法,这样,虽然能解决问题,但是其代价就是在程序中存在大量的重复性代码。

那么,如何才能更好的解决此问题呢?此时需要用到AOP(面向切面编程)的思想。而利用java中的动态代理机制就能很容易的实现AOP

 



 

 

接口:

 

public interface Log {
public   void logging();
}

 目标类:

 

public class LogImpl implements Log {

@Override
public void logging() {
System.out.println("=====logging方法执行,写入日志======");

}

}

 代理类:

 

package com.test.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class LogProxy implements InvocationHandler {
private Object proxyObj;

public LogProxy(Object obj) {
this.proxyObj = obj;
}

@SuppressWarnings("unchecked")
public static Object bind(Object obj) {
Class cls = obj.getClass();
return Proxy.newProxyInstance(cls.getClassLoader(),
cls.getInterfaces(), new LogProxy(obj));

}

@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
dobefore(method);
Object object = method.invoke(proxyObj, args);
doafter(method);
return object;
}

private void dobefore(Method method) {
prt("方法" + method.getName() + "執行前");
}

private void doafter(Method method) {
prt("方法" + method.getName() + "執行后");
}

public void prt(String msg) {
System.out.println(msg);
}
}

 

客户端调用:

 

public class Testlog {
public static void main(String[] args) {
// TODO Auto-generated method stub
Log login = (Log)LogProxy.bind(new LogImpl());

login.logging();

}
}

 运行结果:

 

 

方法logging執行前
=====logging方法执行,写入日志======
方法logging執行后
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: