Artikel ini memperdalam pemahaman tentang proxy dinamis dan pemrograman AOP melalui kerangka kerja kecil untuk pengemasan dan konfigurasi fungsi AOP yang diimplementasikan oleh proxy dinamis.
Buat objek dari kelas yang sesuai berdasarkan nilai (nama lengkap kelas) yang sesuai dengan kunci xxx dari file konfigurasi.
Jika dan hanya jika nilai yang sesuai dengan xxx adalah com.iot.proxy.aopframework.ProxyFactoryBean , objek kelas proxy dinamis yang sesuai dihasilkan. Kelas target dan kelas implementasi pemberitahuan dari objek proxy dikonfigurasi oleh xxx.target dan xxx.advice masing -masing.
config.propertiest terletak di paket aopframework
#xxx = java.util.arraylist
xxx = com.iot.proxy.aopframework.proxyfactorybean
xxx.advice = com.iot.proxy.myadvice
xxx.target = java.util.arraylist
Paket: com.iot.proxy.aopframework , dengan kelas/antarmuka berikut:
Paket com.iot.proxy.aopframework; import java.lang.reflect.method;/*** Dibuat oleh Brian pada 2016/2/2. */saran antarmuka publik {void beforemethod (metode metode); void aftermethod (metode metode);} Paket com.iot.proxy.aopframework; import java.lang.reflect.method;/*** Dibuat oleh Brian pada 2016/2/2. */public class MyAdvice implements Advice{long beginTime = 0;@Override public void beforeMethod(Method method) {System.out.println(method.getName()+" before at "+beginTime);beginTime = System.currentTimeMillis();}@Override public void afterMethod(Method method) {long endTime = System.currentTimeMillis (); System.out.println (Method.getName ()+ "Total Biaya"+ (endtime-beginTime));}} Paket com.iot.proxy.aopframework; impor java.io.ioException; impor java.io.inputstream; import java.util.properties;/*** Dibuat oleh Brian pada 2016/2/2. */kelas publik beanfactory {properties properties = new properties (); Public beanFactory (inputStream inputStream) {try {properties.load (inputStream);} catch (ioException e) {e.printstacktrace ();}} objek publik getBean (string name) {e.printStackRace (); {Class clazz = Class.forName(className);bean = clazz.newInstance();}catch (ClassNotFoundException e) {e.printStackTrace();}catch (InstantiationException e) {e.printStackTrace();}catch (IllegalAccessException e) {e.printStackTrace();}if (bean instanceof Proxyfactorybean) {proxyfactorybean proxyfactorybean = (proxyfactorybean) bean; saran saran = null; objek target = null; coba {nasihat = (saran) class.forname (target.getproperty (name+". Saran"))). NewInstance (); target = GetProperty (nama+". Class.forname (properties.getProperty (name+". Target")). NewInstance ();} catch (InstantiationException e) {e.printstacktrace ();} catch (IllegalAccessException e) {e.printStackTrace ();} Catch (ClassNoundException E) {e.printStackRace ();} Catch (ClassNoundException e) {e.printstacktrace ();} proxyfactorybean.setAdvice (saran); proxyfactorybean.setarget (target); objek proxy = ((proxyfactorybean) bean) .getproxy (); return proxy;} return bean;}}} Paket com.iot.proxy.aopframework; import java.lang.reflect.invocationHandler; impor java.lang.reflect.method; import java.lang.Reflect.proxy;/*** Dibuat oleh Brian pada 2016/3/3. */Kelas Publik ProxyFactoryBean {Private Object Target; Saran Saran Privat; Objek Publik GetProxy () {objek proxy = proxy.newProxyInstance (target.getClass (). GetSclassLoader (), target.getClass (). GetInterfaces (), new dayon () {@override public (). {Saran.Beforemethod (Metode); objek retval = method.invoke (target, args); nasihat. setAdvice (saran saran) {this.advice = nasihat;}} Paket com.iot.proxy.aopframework; import java.io.inputstream; impor java.util.collection;/*** dibuat oleh Brian pada 2016/2/3. */kelas publik aopframeworktest {public static void main (string [] args) {inputStream inputStream = aopframeworkTest.class.getResourceAsstream ("config.properties"); objek bean = new Beanfactory (inputStream) .getBean ("xxx"); System.out.println (bean.getClass (). GetName ()); (koleksi) bean) .clear ();}}Outputnya adalah:
com.sun.proxy. $ proxy0
jelas sebelumnya di 0
Total biaya yang jelas 0
Outputnya adalah:
java.util.arraylist
Dapat dilihat bahwa mengubah file konfigurasi dapat mengubah hasil yang berjalan dari kode, sehingga mencapai hasil yang fleksibel.
Di atas adalah seluruh konten artikel ini tentang kode instance kerangka kerja kecil untuk pengemasan dan konfigurasi fungsi AOP Java. Saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!