SpringAOP 설정 주입 의 실현 절차

AOP_절단면 프로 그래 밍 에 대한 초보 적 이해
우 리 는 먼저 한 장면 을 상상 합 니 다.당신 은 프로젝트 를 만 들 고 있 습 니 다.개발 과정 에서 여러 모듈 에 반복 되 는 코드 가 있 습 니 다.그래서 이 를 하나의 방법 으로 추상 화한 다음 에 필요 한 곳 에서 이 방법 을 호출 합 니 다.이 코드 를 수정 해 야 할 때 이 방법 만 수정 하면 됩 니 다.어느 날,당신 의 Boss 는 새로운 수 요 를 주 었 습 니 다.한 가지 방법 을 추상 화 한 다음 에 이 방법 이 필요 한 모듈 에서 이 방법 을 호출 해 야 합 니 다.이것 은 당신 을 골 치 아 프 게 할 수 있 습 니 다.대량의 코드 를 수정 해 야 합 니 다.그래서 소스 코드 를 수정 하지 않 고 시스템 업무 에 어떤 기능 을 추가 할 수 있 을까요?다행히 AOP 는 이 문 제 를 잘 해결 할 수 있 었 다.
간단 한 소개
AOP:개발 자가 소스 코드 를 수정 하지 않 는 전제 에서 시스템 의 업무 구성 요소 에 특정한 유 니 버 설 기능 을 추가 하도록 보장 합 니 다.본질은 AOP 프레임 워 크 에서 업무 구성 요 소 를 수정 하 는 여러 가지 방법의 소스 코드 입 니 다.우 리 는 이 를 두 가지 로 나 눕 니 다.
정적 AOP
AOP 프레임 워 크 는 컴 파일 단계 에서 프로그램 소스 코드 를 수정 하여 정적 AOP 프 록 시 클래스(생 성 된*.class 파일 이 수정 되 었 으 므 로 특정한 컴 파일 러 를 사용 해 야 합 니 다)를 생 성 했 습 니 다.예 를 들 어 AspectJ.
동적 AOP:
AOP 프레임 워 크 는 실행 단계 에서 동적 생 성 프 록 시 대상(메모리 에 JDK 동적 프 록 시 또는 CGlib 로 AOP 프 록 시 클래스 를 동적 으로 생 성 합 니 다),예 를 들 어 SpringAOP.
자세하게 설명 하 다
Spring 알림 유형
명칭.
라벨
설명 하 다.
사전 통지
< aop:before >
사전 알림 설정 에 사용 합 니 다.추가 방법 을 지정 하여 접점 방법 전에 실행 합 니 다.
후방 알림
< aop:after-returning >
설정 후 알림 에 사용 합 니 다.강화 방법 을 지정 하여 접점 방법 을 지정 한 후에 실행 합 니 다.
서 라운드 알림
< aop:around >
서 라운드 알림 설정 에 사용 합 니 다.강화 방법 을 지정 합 니 다.
이상 알림
< aop:throwing >
이상 알림 설정 에 사용 합 니 다.이상 이 발생 했 을 때 강화 하 는 방법 을 지정 합 니 다.
최종 통지
< aop:after >
최종 알림 설정 에 사용 합 니 다.증강 방식 의 집행 에 이상 이 있 든 없 든 간 에 모두 집행 할 것 이다.
실전 연습
의존 패키지 가 져 오기

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.3.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/aopalliance/aopalliance -->
        <dependency>
            <groupId>aopalliance</groupId>
            <artifactId>aopalliance</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
증강 클래스 및 인터페이스 만 들 기
강화 클래스 인터페이스:

public interface VisitService {
    //        ,    ,    ,    
    void visit(String str) throws Exception;

    //        
    void around();
}
증강 클래스:

public class VisitServiceImpl implements VisitService {
    //  ,  ,  ,        
    public void visit(String str) throws Exception{
        System.out.println(str);
        if(!str.equalsIgnoreCase("agree")){
            throw new Exception("    ");
        }
    }
    //        
    public void around() {
        System.out.println("    ");
    }
}
절단면 클래스 만 들 기

public class VisitAspect {
    //    
    public void visitBefore(JoinPoint joinPoint){
        System.out.println("  :");
    }
    //    ,      ,   
    public void visitAfter(JoinPoint joinPoint){
        System.out.println("    ");
    }
    //         
    public void visitSuccess(JoinPoint joinPoint){
        System.out.println("    ,  ");
    }
    //    ,     
    public void visitThrow(JoinPoint joinPoint, Throwable ex){
        System.out.println("    ,  ");
    }
    //    ,          
    public Object visitAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
        System.out.println("-------  -------");
        Object obj = proceedingJoinPoint.proceed();
        System.out.println("-------  -------");
        return obj;
    }
}
xml 파일 을 설정 하려 면 제3자 제약 조건 을 추가 해 야 합 니 다.

    <bean id="userDao" class="Spring_AOP.service.impl.VisitServiceImpl"></bean>
    <bean id="aspect" class="Spring_AOP.service.VisitAspect"></bean>
    
    <aop:config>
        <aop:pointcut id="pointcut" expression="execution(* Spring_AOP.service.impl.VisitServiceImpl.visit(..))"/>
        <aop:pointcut id="pointcut1" expression="execution(* Spring_AOP.service.impl.VisitServiceImpl.around())"/>
        <aop:aspect ref="aspect">
             <aop:before method="visitBefore" pointcut-ref="pointcut"></aop:before>
             <aop:after method="visitAfter" pointcut-ref="pointcut"></aop:after>
             <aop:after-returning method="visitSuccess" pointcut-ref="pointcut"></aop:after-returning>
             <aop:around method="visitAround" pointcut-ref="pointcut1"></aop:around>
             <!--      aop:after-throwing -->
             <aop:after-throwing method="visitThrow" pointcut-ref="pointcut" throwing="ex"></aop:after-throwing>
         </aop:aspect>
    </aop:config>
주,execution()에 대해
1.execution():표현 식 주체(execution 을 추가 해 야 합 니 다).
2.첫 번 째*번:반환 값 형식 을 표시 하고*번 호 는 모든 유형 을 표시 합 니 다.
3.가방 이름:차단 이 필요 한 가방 이름 을 표시 합 니 다.뒤의 두 문장 은 현재 가방 과 현재 가방 의 모든 하위 가방,cn.smd.service.impl 가방,자손 이 모든 종류의 방법 을 가방 에 넣 는 것 을 표시 합 니 다.
4.두 번 째*번:유형 명 을 나타 내 고*번 은 모든 유형 을 나타 낸다.
5.*(..):마지막 으로 이 별 표 는 방법 명 을 나타 내 고*호 는 모든 방법 을 나타 내 며 뒤의 괄호 안에 방법 을 나타 내 는 매개 변 수 를 나타 내 고 두 문장 은 모든 매개 변 수 를 나타 낸다.
작성 한 주의사항:execution(*cn.smd.service.impl..(..)
테스트 클래스 만 들 기

 public class visitTest {
    @Test
    public void VisitTest(){
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext_AOP.xml");
        VisitService visitService = app.getBean(VisitService.class);
        try {
            visitService.visit("agree");
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            visitService.visit("ok");
        } catch (Exception e) {
            e.printStackTrace();
        }
        visitService.around();
    }
}
테스트 실행
구령:
agree
요청 성공,환영
입력 완료
구령:
ok
요청 실패,거절
입력 완료
둘러싸다
서 라운드 알림
둘러싸다
총결산
  • SpringAOP 는 구성 요소 의 결합 을 한층 더 낮 추고 결합 을 해제 합 니 다
  • 더 좋 은 모니터링 프로그램 을 할 수 있 고 권한 차단 을 할 수 있 습 니 다
  • 주:AOP 설정 주입 을 배 울 때 오류 가 발생 했 을 때 각 알림 의 상 태 를 주의해 야 합 니 다이상 은 SpringAOP 설정 주입 의 실현 절차 에 대한 상세 한 내용 입 니 다.SpringAOP 설정 주입 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

    좋은 웹페이지 즐겨찾기