Cet article présente principalement la réflexion Java pour implémenter le proxy Aop. L'éditeur pense que c'est plutôt bien. Maintenant, je vais le partager avec vous et le donner comme référence. Suivons l'éditeur et jetons un coup d'œil.
Utilisez la réflexion pour générer le proxy dynamique du JDK, qui est le proxy AOP dans AOP, remplaçant l'objet cible , intégrant ainsi des améliorations dans le code. .
Définir l'interface du proxy
Étant donné que le proxy dynamique JDKf ne peut créer que des proxys dynamiques pour les interfaces, définissez d'abord l'interface. Supposons que nous devions ajouter le traitement des transactions au. Méthode de sauvegarde des données. Nous avons une interface UserDao, qui a une méthode Save. Le code est le suivant :
public interface UserDao { public void save(); }
Définir l'instance proxy
public class UserDaoImpl implements UserDao { @Override public void save() { System.out.println("I am save user...."); } }
Définir le code d'amélioration
public class UserTx { public void before(){ System.out.println("before save....."); } public void after(){ System.out.println("after save......"); } }
Définir le gestionnaire d'invocation
public class UserDaoInvocationHandler implements InvocationHandler { / 需要代理的对象 / private Object proxyObj; / 指定我们需要代理的对象 @param proxyObj */ public void setProxyObj(Object proxyObj) { this.proxyObj = proxyObj; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { UserTx tx = new UserTx(); tx.before(); Object resultObj = method.invoke(proxyObj, args); tx.after(); return resultObj; } }
Résultats des tests
import java.lang.reflect.Proxy; public class ProxyTst { public static void main(String[] args) { // proxy object UserDao target = new UserDaoImpl(); // invocation handler UserDaoInvocationHandler handler = new UserDaoInvocationHandler(); handler.setProxyObj(target); // proxy UserDao targeted = (UserDao) Proxy.newProxyInstance( target.getClass().getClassLoader(), target.getClass().getInterfaces(), handler); // execute proxyed object targeted.save(); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!