この記事は、動的プロキシによって実装されたAOP関数のパッケージングと構成のための小さなフレームワークを通じて、動的プロキシとAOPプログラミングの理解を深めます。
構成ファイルのキーxxxに対応する値(クラスのフルネーム)に基づいて、対応するクラスのオブジェクトを作成します。
xxxに対応する値がcom.iot.proxy.aopframework.ProxyFactoryBeanである場合にのみ、対応する動的プロキシクラスオブジェクトが生成されます。プロキシオブジェクトのターゲットクラスと通知実装クラスは、それぞれxxx.targetとxxx.adviceで構成されています。
config.propertiest 、aopframeworkパッケージにあります
#xxx = java.util.arraylist
xxx = com.iot.proxy.aopframework.proxyfactorybean
xxx.advice = com.iot.proxy.myadvice
xxx.target = java.util.arraylist
パッケージ: com.iot.proxy.aopframework 、次のクラス/インターフェイスを備えています。
パッケージcom.iot.proxy.aopframework; Import Java.lang.Reflect.Method;/***は2016/2/2にBrianが作成しました。 */パブリックインターフェイスアドバイス{void beforemethod(メソッドメソッド); void aftermethod(メソッドメソッド);}パッケージcom.iot.proxy.aopframework; Import Java.lang.Reflect.Method;/***は2016/2/2にBrianが作成しました。 */public class myadviceはアドバイスを実装します{long begintime = 0; @override public void beforemethod(method method){system.out.println(method.getname()+"at at"+begintime); System.CurrentTimeMillis(); System.out.println(method.getName()+ "Cost Total"+(endtime-begintime));}}}パッケージcom.iot.proxy.aopframework; import java.io.ioexception; Import java.io.inputStream; Import java.util.properties;/***は2016/2/2に作成されました。 */public class beanfactory {properties properties = new Properties(); public beanfactory(inputstream inputstream){try {properties.load(inputstream);} catch(ioexception e){exprintstacktrace();}} public object getbean(string name){string class = class.get.property(class(class) class.forname(classname); bean = clazz.newinstance();} catch(classnotfoundexception e){e.printstacktrace();} catch(instantiationexception e){e.printstacktrace();} catch(Illegalaccessexception e){e.printstacktrace();};}; proxyfactorybean){proxyfactorybean proxyfactorybean =(proxyfactorybean)bean; advies advieg = null; object target = null; try {advief =(advise)class.forname(properties.getProperty(name+"。アドバイス")。newinstance();ターゲット=; class.forname(properties.getProperty(name+"。ターゲット")) {e.printstacktrace();} proxyfactorybean.setadvice(advise); proxyfactorybean.settarget(target); object proxy =((proxyfactorybean)bean).getproxy(); return proxy;} return bean;}}}}パッケージcom.iot.proxy.aopframework; Import java.lang.refllect.invocationHandler; Import java.lang.reflect.method; Import java.lang.reflect.proxy;/*** Brianが2016/2/3に作成しました。 */public class proxyfactorybean {private object target; private advies advief; public object getProxy(){object proxy = proxy.newProxyInstance(target.getClass()。getClassoloaser()、target.getClass()、getInterfaces()。 {advid.beforemethod(method); object retval = method.invoke(ターゲット、args); advide.afteremethod(method); return retval;}}); return proxy;} public gettarget(){return target;} public void settarget(object target){this.target = Target = target getadvice;} public voidvice(アドバイス){this.advice = advice;}}パッケージcom.iot.proxy.aopframework; import java.io.inputstream; Import java.util.collection;/***は2016/2/3に作成されました。 */public class aopframeworktest {public static void main(string [] args){inputstream inputstream = aopframeworktest.class.getResourceasStream( "config.properties"); object bean = new beanFactory(inputstream).getBean( "xxx"); system.out.println(bean.getClass()。getName());((collection)bean).clear();}}}出力は次のとおりです。
com.sun.proxy。$ proxy0
0でクリアされます
クリアコスト合計0
出力は次のとおりです。
java.util.arraylist
構成ファイルを変更すると、コードの実行結果が変更され、柔軟な結果が得られることがわかります。
上記は、JavaのAOP関数のパッケージングと構成のための小さなフレームワークインスタンスコードに関するこの記事のコンテンツ全体です。私はそれが誰にでも役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!