Spring 프 록 시 팩 터 리 빈 기반 AOP 에이전트 만 들 기
6112 단어 springproxyfactorybean창설aop대리
앞의 학습 을 통 해 알 수 있 듯 이 알림(Advice)은 목표 의 접점 을 강화 하 는 내용 이 고 Spring AOP 는 알림(Advice)에 org.aopaliance.aop.advice 인 터 페 이 스 를 제공 합 니 다.
Spring 알림 은 목표 클래스 방법의 연결 점 위치 에 따라 다음 과 같은 다섯 가지 유형 으로 나 눌 수 있 습 니 다.표 1 참조.
표 1 Spring 알림 의 5 가지 유형
명칭.
설명 하 다.
org.springframework.aop.MethodBeforeAdvice(사전 알림)
방법 전에 자동 으로 실행 되 는 알림 을 사전 알림 이 라 고 하 며 권한 관리 등 기능 에 사용 할 수 있 습 니 다.
org.springframework.aop.After ReturningAdvice(사후 알림)
방법 후 자동 으로 실행 되 는 알림 을 백 엔 드 알림 이 라 고 하 며 스 트림 닫 기,파일 업로드,임시 파일 삭제 등에 사용 할 수 있 습 니 다.
org.aopaliance.intercept.MethodInterceptor(서 라운드 알림)
방법 전후 에 자동 으로 실행 되 는 알림 을 서 라운드 알림 이 라 고 하 며 로그,사무 관리 등 기능 에 사용 할 수 있 습 니 다.
org.springframework.aop.ThrowsAdvice(이상 알림)
방법 이 이상 을 던 졌 을 때 자동 으로 실행 되 는 알림 을 이상 알림 이 라 고 하 며 이상 기록 로그 처리 등에 사용 할 수 있 습 니 다.
org.springframework.aop.IntroductionInterceptor(안내 알림)
대상 클래스 에 새로운 방법 과 속성 을 추가 하면 이전 버 전 프로그램(증강 클래스)을 수정 하 는 데 사용 할 수 있 습 니 다.
성명 식 Spring AOP
Spring 에서 AOP 에이 전 트 를 만 드 는 기본 적 인 방법 은 org.spring from work.Proxy Factory Bean 을 사용 하 는 것 입 니 다.이러한 접근 점 과 알림 은 완전한 제어 능력 을 제공 하고 지정 한 내용 을 생 성 할 수 있 습 니 다.
Proxy Factory Bean 클래스 에서 자주 사용 되 는 속성 은 표 2 와 같 습 니 다.
표 2 Proxy Factory Bean 의 상용 속성
속성 이름
묘사 하 다. 서술 하 다.
target
에이전트 대상
proxyInterfaces
에이전트 가 구현 할 인터페이스 입 니 다.여러 개의 인터페이스 가 있 으 면 다음 형식 으로 값 을 할당 할 수 있 습 니 다.
...
proxyTargetClass
인터페이스 대신 클래스 에이 전 트 를 true 로 설정 할 때 CGLIB 에이 전 트 를 사용 할 지 여부
interceptorNames
목 표를 심 어 주 는 조언 이 필요 합 니 다.
singleton
돌아 오 는 프 록 시가 단일 예 인지,기본 값 은 true(하나의 인 스 턴 스 를 되 돌려 줍 니 다)입 니 다.
optimize
true 로 설정 할 때 CGLIB 강제 사용
Spring 알림 에서 서 라운드 알림 은 매우 전형 적 인 응용 이다.스프링 이 AOP 에이 전 트 를 만 드 는 과정 을 서 라운드 알림 사례 를 통 해 보 여 줍 니 다.
1.JAR 가방 가 져 오기
핵심 JAR 패 키 지 를 바탕 으로 spring Demo 03 프로젝트 의 lib 디 렉 터 리 에 AOP 의 JAR 패 키 지 를 가 져 옵 니 다.구체 적 으로 다음 과 같 습 니 다.
src 디 렉 터 리 아래 com.mengma.factory bean 이라는 가방 을 만 듭 니 다.이 가방 아래 에 절단면 류 MyAspect 를 만 듭 니 다.다음 과 같 습 니 다.
package com.mengma.factorybean;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
// , , Spring
public class MyAspect implements MethodInterceptor {
public Object invoke(MethodInvocation mi) throws Throwable {
System.out.println(" ");
//
Object obj = mi.proceed();
System.out.println(" ");
return obj;
}
}
상기 코드 에서 MyAspect 류 는 MethodInterceptor 인 터 페 이 스 를 실현 하고 인터페이스의 invoke()방법 을 실현 했다.MethodInterceptor 인 터 페 이 스 는 Spring AOP 의 JAR 패키지 가 제공 하 는 것 이 며,invoke()방법 은 목표 방법 미 를 확정 하 는 데 사용 되 며,Spring 은 목표 방법 전후 에 어떤 방법 을 실행 해 야 하 는 지 알려 줍 니 다.여기 서 효 과 를 보 여주 기 위해 목표 방법 전후 에 각각 콘 솔 에 해당 하 는 문 구 를 출력 하 였 습 니 다.3.Spring 프로필 만 들 기
com.mengma.factory bean 패키지 에 프로필 applicationContext.xml 을 만 듭 니 다.다음 과 같 습 니 다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http:/www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- -->
<bean id="customerDao" class="com.mengma.dao.CustomerDaoImpl" />
<!-- advice -->
<bean id="myAspect" class="com.mengma.factorybean.MyAspect" />
<!-- -->
<bean id="customerDaoProxy"
class="org.springframework.aop.framework.ProxyFactoryBean">
<!-- -->
<property name="proxyInterfaces" value="com.mengma.dao.CustomerDao" />
<!-- -->
<property name="target" ref="customerDao" />
<!-- -->
<property name="interceptorNames" value="myAspect" />
<!-- ,true: cglib; false : jdk -->
<property name="proxyTargetClass" value="true" />
</bean>
</beans>
상기 코드 에서 먼저 목표 클래스 와 알림 을 설정 한 다음 에 ProxyFactory Bean 클래스 를 사용 하여 프 록 시 대상 을 생 성 합 니 다.14 줄 코드 는 프 록 시 구현 인 터 페 이 스 를 설정 합 니 다.16 줄 코드 는 에이전트 의 대상 을 설정 합 니 다.18 번 줄 코드 는 목 표를 심 어야 한 다 는 통 지 를 설정 했다.20 번 째 줄 코드 의 value 속성 값 이 true 일 때 CGLIB 에이 전 트 를 사용 하고 속성 값 이 false 일 때 JDK 동적 에이 전 트 를 사용 합 니 다.4.테스트 클래스 만 들 기
com.mengma.factory bean 패키지 아래 Factory BeanTest 라 는 테스트 클래스 를 만 듭 니 다.편집 후 다음 과 같 습 니 다.
package com.mengma.factorybean;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.mengma.dao.CustomerDao;
public class FactoryBeanTest {
@Test
public void test() {
String xmlPath = "com/mengma/factorybean/applicationContext.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
xmlPath);
CustomerDao customerDao = (CustomerDao) applicationContext
.getBean("customerDaoProxy");
customerDao.add();
customerDao.update();
customerDao.delete();
customerDao.find();
}
}
5.항목 실행 및 결과 보기JUnit 테스트 실행 test()방법 을 사용 하여 실행 에 성공 하면 콘 솔 의 출력 결 과 는 그림 1 과 같 습 니 다.
그림 1 실행 결과
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.