Este artigo aprofunda o entendimento da programação dinâmica de proxy e AOP através de uma pequena estrutura para embalagem e configuração das funções AOP implementadas por proxy dinâmico.
Crie um objeto da classe correspondente com base no valor (nome completo da classe) correspondente à chave xxx do arquivo de configuração.
Se e somente se o valor correspondente a xxx for com.iot.proxy.aopframework.ProxyFactoryBean , o objeto de classe de proxy dinâmico correspondente será gerado. A classe de destino e a classe de implementação de notificação do objeto Proxy são configurados por xxx.target e xxx.advice , respectivamente.
config.propertiest está localizado no pacote AOPFramework
#xxx = java.util.arraylist
xxx = com.iot.proxy.aopframework.proxyFactoryBean
xxx.advice = com.iot.proxy.myadvice
xxx.target = java.util.ArrayList
Pacote: com.iot.proxy.aopframework , com as seguintes classes/interfaces:
pacote com.iot.proxy.aopframework; importar java.lang.reflect.method;/*** Criado por Brian em 2016/2/2. */consultoria de interface pública {void beforemethod (método do método); Void Aftermethod (método do método);} pacote com.iot.proxy.aopframework; importar java.lang.reflect.method;/*** Criado por Brian em 2016/2/2. */classe pública myadvice implementa aconselhamento {long beginTime = 0; @Override public void beforemethod (método do método) {System.out.println (method.getName ()+"antes de"+beginMe); BeginTime = System.CurrentTimEMILLIS ();}@Public Void AfterMod (Method) (Method)) System.currenttimemillis (); system.out.println (method.getName ()+ "Cost Total"+ (Endtime-Begintime));}} pacote com.iot.proxy.aopframework; importar java.io.ioException; importar java.io.inputStream; importar java.util.properties;/*** criado por Brian em 2016/2/2. */public class BeanFactory {Propriedades Propriedades = new Properties (); Public BeanFactory (InputStream inputStream) {try {Properties.load (inputStream);} Catch (ioException e) {e.printStacktrace (); {Classe clazz = classe.ForName (className); bean = clazz.newInstance ();} catch (classNotFoundException e) {e.printStackTrace ();} Catch (IllegalAccessException E) {E.PrintStackTrace ();} Catch (ilegalAccessException e) {E.PRACTRACK (); ProxyFactoryBean) {proxyFactoryBean proxyFactoryBean = (proxyFactoryBean) bean; conselhos de conselho = null; objetos -destino = null; tente {conselhos = (conselhos) class.ForName (Propriedades.getProperty (nome+". Conselhos"). Class.ForName (Properties.GetProperty (nome+". Target")). NewInstance ();} Catch (InstantiationException e) {E.PrintStackTrace ();} Catch (ClassNotFoundException e) {e.printStackTrace ();} Catch (ClassNotFoundException e) {E.PrintStackTrace ();} proxyFactoryBean.SetAdvice (aconselhamento); proxyFactoryBean.SetTarget (Target); proxy do objeto = ((proxyFactoryBean) Bean) .getProxy (); Return Proxy;} Return Bean;}}}}}}} pacote com.iot.proxy.aopframework; importar java.lang.reflect.invocationHandler; importar java.lang.reflect.method; importar java.lang.reflect.proxy;/*** criado por Brian em 2016/2/3. */public class ProxyFactoryBean {Target de Objeto Privado; Conselho de Conselho Privado; Public Object getProxy () {Object proxy = proxy.newproxyInstance (Target.getClass (). getClassLoader (), Target.getClass (). GetInterfaces (), NOVAvocationHandler () {@Override {aconselhamento.beforemethod (método); objeto retval = method.invoke (Target, args); aconselhamento.Afteremethod (método); retornar retVal;}}); retornar proxy;} public object getTarget () {retirar alvo;} public void Settetget (objeto destino) {this.target = alvo;}; conselhos) {this.advice = conselho;}} pacote com.iot.proxy.aopframework; importar java.io.inputStream; importar java.util.collection;/*** criado por Brian em 2016/2/3. */public class AopFrameworktest {public static void main (string [] args) {inputStream inputStream = aopframeworktest.class.getResourceasStream ("config.properties"); objeto bean = novo BeanFactory (InputStream) .getBean ("xxx"); System.out.println (bean.getclass (). GetName ()); (((coleção) bean) .clear ();}}A saída é:
com.sun.proxy. $ proxy0
claro antes em 0
Custo claro total 0
A saída é:
java.util.ArrayList
Pode -se observar que a alteração do arquivo de configuração pode alterar os resultados em execução do código, alcançando assim resultados flexíveis.
O exposto acima é o conteúdo inteiro deste artigo sobre o pequeno código de instância da estrutura para a embalagem e configuração das funções AOP de Java. Espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!