Cet article présente principalement des informations JSP liées à l'implémentation de la méthode de remplacement de Spring injection de méthode dans le développement JSP. Les amis intéressés par JSP peuvent se référer à cet article
Remplacement. implémentation de la méthode d'injection de méthode Spring dans le développement JSP
Spring fournit un mécanisme d'implémentation de méthode de remplacement, qui nous permet de modifier l'implémentation d'une certaine méthode de bean. Par exemple, nous avons un bean avec une méthode add() qui peut être utilisée pour calculer la somme de deux entiers, mais cette fois nous voulons changer sa logique d'implémentation pour multiplier les deux entiers s'ils ont la même valeur. Sinon, ajoutez. ensemble.Nous pouvons atteindre cette exigence grâce au mécanisme d'implémentation de la méthode de remplacement fourni par Spring sans modifier ou être incapable de modifier le code source.
Le cœur du mécanisme d'implémentation de la méthode de remplacement est l'interface MethodReplacer, qui définit une méthode reimplement () La logique principale de l'implémentation de notre méthode de remplacement est implémentée dans cette méthode,
. La définition spécifique est la suivante :
public interface MethodReplacer { /** * Reimplement the given method. * @param obj the instance we're reimplementing the method for * @param method the method to reimplement * @param args arguments to the method * @return return value for the method */ Object reimplement(Object obj, Method method, Object[] args) throws Throwable; }
Nous pouvons voir que la méthode reimplement() recevra trois paramètres, où obj représente le bean objet qui doit être remplacé , et la méthode doit être remplacée par la méthode, args représente les paramètres de la méthode correspondants. Pour l’exemple précédent, supposons que nous ayons un bean correspondant à la définition de classe suivante.
public class BeanA { public int add(int a, int b) { return a+b; } } <bean id="beanA" class="com.app.BeanA"/>
Si nous devons remplacer l'implémentation de la méthode add() en multipliant a et b lorsqu'ils sont égaux, sinon en les ajoutant, nous pouvons fournir une implémentation MethodReplacer correspondante pour cette classe de méthode , la mise en œuvre spécifique est la suivante.
public class BeanAReplacer implements MethodReplacer { /** * @param obj 对应目标对象,即beanA * @param method 对应目标方法,即add * @param args 对应目标参数,即a和b */ public Object reimplement(Object obj, Method method, Object[] args) throws Throwable { Integer a = (Integer)args[0]; Integer b = (Integer)args[1]; if (a.equals(b)) { return a * b; } else { return a + b; } } }
Après cela, vous devez spécifier l'utilisation de BeanAReplacer pour remplacer l'implémentation de la méthode add() de beanA lors de la définition de beanA. Ceci est spécifié via l'élément de méthode remplacée. Cela nécessite de spécifier deux attributs , name et replacer. name est utilisé pour spécifier le nom de la méthode qui doit être remplacée, et replacer est utilisé pour spécifier le bean correspondant au MethodReplacer à remplacer. Par conséquent, à ce stade, notre beanA doit être défini comme suit :
<bean id="beanAReplacer" class="com.app.BeanAReplacer"/> <bean id="beanA" class="com.app.BeanA"> <replaced-method name="add" replacer="beanAReplacer"/> </bean>
Si la méthode à remplacer par notre MethodReplacer est une méthode de type surchargée dans le bean correspondant, c'est-à-dire lorsqu'il existe plusieurs méthodes avec le même nom de méthode, nous devons également définir le type du paramètre de méthode correspondant via l'élément arg-type sous l'élément replace-method, afin que nous puissions distinguer quelle méthode doit être remplacée. Par conséquent, pour l'exemple ci-dessus, nous pouvons également le définir comme suit :
<bean id="beanAReplacer" class="com.app.BeanAReplacer"/> <bean id="beanA" class="com.app.BeanA"> <replaced-method name="add" replacer="beanAReplacer"> <arg-type match="int"/> <arg-type match="int"/> </replaced-method> </bean>
Lorsqu'il n'y a qu'une seule méthode correspondant au nom de la méthode, arg-type ne fonctionnera pas, c'est-à-dire Spring n'utilisera pas arg pour le moment -type pour obtenir la méthode de remplacement correspondante, ou en d'autres termes, lorsqu'il n'y a qu'une seule méthode avec le nom spécifié par la méthode remplacée, c'est OK quelle que soit la façon dont arg-type est défini.
Recommandations associées :
Comment tester les pages JSP en dehors du conteneur
Comment utiliser JSP pour se connecter à la base de données MySQL
Un résumé des points de connaissances de base de JSP
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!