>  기사  >  웹 프론트엔드  >  JSP 개발에서 Spring 메소드 주입의 대체 메소드 구현

JSP 개발에서 Spring 메소드 주입의 대체 메소드 구현

韦小宝
韦小宝원래의
2018-01-18 09:53:121708검색

이 글은 주로 JSP 개발에서 Spring메서드 주입의 대체 메소드 구현과 관련된 JSP 정보를 소개합니다. JSP에 관심이 있는 친구들은 이 글을 참고하세요

JSP 개발에서 Spring 메소드 주입의 대체 메소드 구현

Spring은 메소드 구현을 대체하는 메커니즘을 제공하므로 특정 Bean 메소드의 구현을 변경할 수 있습니다. 예를 들어, 두 정수의 합을 계산하는 데 사용할 수 있는 add() 메소드가 있는 Bean이 있지만 이번에는 두 정수가 동일한 값을 갖는 경우 두 정수를 곱하도록 구현 로직을 변경하려고 합니다. 그렇지 않으면 add를 수행합니다. 우리는 소스 코드를 변경하거나 변경할 수 없는 상태에서 Spring이 제공하는 대체 메서드 구현 메커니즘을 통해 이 요구 사항을 달성할 수 있습니다.

대체 메서드 구현 메커니즘의 핵심은 reimplement() 메서드를 정의하는 MethodReplacer 인터페이스입니다. 대체 메서드 구현의 주요 논리는 이 메서드에서 구현됩니다.

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;

}

reimplement() 메소드가 세 개의 매개변수를 수신하는 것을 볼 수 있습니다. 여기서 obj는 대체되어야 하는 bean

object

을 나타내고, 메소드는 대체되어야 하며, args는 해당 메소드 매개변수를 나타냅니다. 이전 예제에서는 다음 클래스 정의에 해당하는 Bean이 있다고 가정합니다.

public class BeanA {

 public int add(int a, int b) {
 return a+b;
 }
 
}
 <bean id="beanA" class="com.app.BeanA"/>

a와 b가 같을 때 곱하여 add() 메소드의 구현을 대체해야 하는 경우, 그렇지 않으면 이 메소드에 해당하는 MethodReplacer 구현 클래스를 제공할 수 있습니다. 구체적인 구현은 다음과 같습니다.

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;
 }
 }

}

그런 다음 beanA를 정의할 때 beanA의 add() 메소드 구현을 대체하기 위해 BeanAReplacer의 사용을 지정해야 합니다. 이는 replacement-method 요소를 통해 지정됩니다. 이름과 대체자라는 두 가지

속성

을 지정해야 합니다. name은 교체해야 하는 메소드의 이름을 지정하는 데 사용되며, replacementr는 교체할 MethodReplacer에 해당하는 Bean을 지정하는 데 사용됩니다. 따라서 이때 beanA는 다음과 같이 정의되어야 합니다.

<bean id="beanAReplacer" class="com.app.BeanAReplacer"/>
 <bean id="beanA" class="com.app.BeanA">
 <replaced-method name="add" replacer="beanAReplacer"/>
 </bean>

MethodReplacer로 대체할 메소드가 해당 Bean의

overloaded

유형 메소드에 속하는 경우, 즉 동일한 메소드가 여러 개 있는 경우 메소드 이름, 또한 replacement-method 요소 아래의 arg-type 요소를 통해 해당 메소드 매개변수의 유형을 정의해야 어떤 메소드를 교체해야 하는지 구별할 수 있습니다. 따라서 위의 예에서는 다음과 같이 정의할 수도 있습니다.

<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>

메서드 이름에 해당하는 메서드가 하나만 있는 경우 arg-type은 작동하지 않습니다. 즉, Spring은 해당 메서드를 기반으로 가져오지 않습니다. replacement, 즉 replacement-method로 지정된 이름의 메소드가 하나만 있는 경우 arg-type을 어떻게 정의하든 상관없이 가능하다.

관련 권장 사항:

컨테이너 외부에서 JSP 페이지를 테스트하는 방법

JSP를 사용하여 MySQL 데이터베이스에 연결하는 방법

JSP 기본 지식 포인트 요약

위 내용은 JSP 개발에서 Spring 메소드 주입의 대체 메소드 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.