JSP 개발 의 Spring 방법 주입 의 교체 방법 실현
Spring 은 교체 방법 으로 실현 되 는 체 제 를 제공 하여 우리 로 하여 금 특정한 bean 의 특정한 방법의 실현 을 바 꿀 수 있 게 한다.예 를 들 어 우 리 는 하나의 bean 이 있 는데 그 중에서 하나의 add()방법 으로 두 정수 의 합 을 계산 할 수 있 지만 이 럴 때 우 리 는 그것 의 실현 논 리 를 두 정수 의 값 이 같 으 면 곱 하 는 것 으로 바 꾸 고 싶다.그렇지 않 으 면 그것들 을 더 하 는 것 이다.원본 코드 를 바 꾸 지 않 거나 바 꿀 수 없 는 상황 에서 우 리 는 Spring 이 제공 하 는 교체 방법 으로 체 제 를 실현 하여 이 요 구 를 실현 할 수 있다.
교체 방법 실현 메커니즘 의 핵심 은 MethodReplacer 인터페이스 입 니 다.그 중에서 reimplement()방법 을 정 의 했 습 니 다.우리 의 교체 방법 이 실현 하 는 주요 논 리 는 바로 이 방법 에서 이 루어 진 것 입 니 다.
구체 적 인 정 의 는 다음 과 같다.
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 대상 을 표시 하고 method 는 교체 방법 이 필요 하 며 args 는 대응 하 는 방법 인 자 를 표시 합 니 다.앞에서 친 예 를 들 어 우리 가 다음 과 같은 정의 에 대응 하 는 bean 이 있다 고 가정 합 니 다.
public class BeanA {
public int add(int a, int b) {
return a+b;
}
}
<bean id="beanA" class="com.app.BeanA"/>
만약 에 우리 가 add()방법의 실현 을 a 와 b 가 같 을 때 곱 하고 그렇지 않 으 면 추가 할 수 있다 면 우 리 는 이 방법 에 대응 하 는 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 를 정의 할 때 BeanAReplacer 를 사용 하여 beanA 를 대체 하 는 add()방법 을 지정 해 야 합 니 다.이것 은 replace-method 요 소 를 통 해 지 정 됩 니 다.두 개의 속성 을 지정 해 야 합 니 다.name 과 replace.name 은 교체 할 방법의 이름 을 지정 하고 replace 는 교체 할 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 에서 과부하 형식 에 속 하 는 방법,즉 여러 가지 방법 명 이 같은 방법 이 존재 할 때 우 리 는 replaced-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 은 이때 arg-type 에 따라 대응 하 는 방법 을 바 꾸 지 않 거나 replaced-method 가 이름 을 지정 하 는 방법 이 하나만 존재 할 때 arg-type 이 어떻게 정의 하 든 상관 없습니다.이상 은 JSP 에서 Spring 방법 을 주입 하 는 교체 방법 이 실 현 된 실례 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글로 토론 할 수 있 습 니 다.읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
VScode에서 MVN, Tomcat, JSP/Servlet에서 웹 앱 개발 메모Java와 maven 설치 ( ) 플러그인을 VScode에 설치 Tomcat DL ( ) ※ 환경에 따라 Tomcat 버전을 선택하십시오 Tomcat을 DL하면 zip을 압축 해제하고 모든 디렉토리에 넣습니다. ma...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.