Spring 프 록 시 팩 터 리 빈 기반 AOP 에이전트 만 들 기

Spring 알림 유형
앞의 학습 을 통 해 알 수 있 듯 이 알림(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 패 키 지 를 가 져 옵 니 다.구체 적 으로 다음 과 같 습 니 다.
  • spring-aop-3.2.13.RELEASE.jar:Spring 이 AOP 에 제공 하 는 실현 으로 Spring 의 가방 에서 이미 제공 되 었 습 니 다
  • com.springsource.org.aopaliance-1.0.0.jar:AOP 가 제공 하 는 규범 으로 Spring 홈 페이지 주소 에서 사용 할 수 있 습 니 다.   https://repo.spring.io/webapp/#/search/quick/검색 및 다운로드..
  • 2.절단면 클래스 MyAspect 만 들 기
    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 실행 결과
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기