Spring 공부 셋째 날.

6494 단어
  • 문제 분석: 처음에 은행 이체 사례를 진행할 때 네 가지 연결을 얻을 수 있는데 그것이 바로 접속 조회, 이체 계좌, 갱신 이체, 이체 계좌이다.이렇게 하면 이체가 동기화되지 않는다. 만약에 어느 곳에 이상이 생기면 앞의 코드가 실행되고 뒤의 업데이트가 실행되지 않아 한 계좌가 돈을 올리고 다른 계좌가 돈을 줄이지 않는다.
  • 해결 방법: 전체 과정을 하나의 연결로만 만들고 ThreadLocal 대상을 사용하여 연결과 현재 라인을 연결시켜 하나의 라인에서 업무를 제어할 수 있는 대상만 만들어야 한다.
  • 사무의 제어는 업무층에 있어야 하기 때문에 두 가지 도구 유형을 사용해야 한다. 라인 연결 연결과 사무 관리에 관한 것은 사용하기에 매우 번거롭다.동적 에이전트 기술을 사용하여 사무 관리 방법을 강화하여 피대리 대상의 모든 방법이 이 방법을 거치도록 해야 한다.

  • 3일차 학습 주제: AOP 탄젠트 프로그래밍
    정의: 사전 컴파일링 방식과 운행기 동적 에이전트를 통해 프로그램 기능의 통일된 유지보수를 실현하는 기술이다.AOP은 OOP의 연속으로 함수식 프로그래밍의 파생 범위이다.
    간단하게 말하면 프로그램의 중복 코드를 추출하고 실행이 필요할 때 동적 에이전트 기술을 사용하여 원본 코드를 수정하지 않는 토대에서 기존의 방법을 강화하는 것이다.
    AOP의 역할: 프로그램이 실행되는 동안 원본 코드를 수정하지 않고 기존 방법을 강화합니다.
    장점: 중복 코드를 줄이고 개발 효율을 높이며 유지 보수가 편리하다.
    AOP의 실현 방식: 동적 에이전트 기술을 사용한다.
    *Spring의 AOP[포인트]
    설명: Spring의 AOP을 배우는 것은 바로 설정을 통해 동적 에이전트를 실현하는 것이다.
    관련 용어:
  • JoinPoint(연결점): 차단된 점을 가리키며, 스프링에서 이 점들은 방법을 가리킨다. 왜냐하면 스프링은 방법 유형의 연결점만 지원하기 때문이다.
  • PointOut(접점): 접점은 우리가 어떤 JoinPoint를 차단해야 하는지를 가리킨다.
  • Advice(알림/향상): 알림은 JoinPoint를 가로막은 후 할 일을 말합니다.공지 유형: 선행 공지, 후행 공지, 예외 공지, 최종 공지, 서라운드 공지.
  • 사전 알림:method.invoke () 앞에서 실행
  • 후면 알림:method.invoke () 이후 실행
  • 이상 알림:catch()에서의 이상 알림
  • 최종 통지:finally()에서 최종 통지
  • 순환 알림: 전체 동적 에이전트 과정이 실행하는 전체 invoke 방법은 순환 알림이고 순환 알림에 명확한 접근점 방법이 호출된다
  • Introduction(인덱스): 인덱스는 코드를 수정하지 않는 전제에서 인troduction은 실행 기간에 클래스를 위해 동적으로 방법이나 Field를 추가할 수 있는 특수한 알림이다.
  • Target(대상 객체): 에이전트의 대상 객체, 즉 에이전트의 대상입니다.
  • Weaving(직입): 증강을 목표 대상에 응용하여 새로운 프록시 대상을 만드는 과정을 말한다.spring은 동적 프록시를 사용하고 AspectJ는 컴파일러 및 클래스 마운트 기간을 사용합니다.
  • Proxy(에이전트): 한 클래스가 AOP에 의해 강화된 후에 결과 에이전트 클래스가 생성됩니다.
  • Aspect(절단면): 삽입점과 알림(인용)의 결합이다.

  • 스프링의 AOP을 배우려면 명확한 것을 배워야 한다.
  • 개발 단계(우리가 할 일)
  • 핵심 업무 코드 작성(개발 메인 라인)
  • 공공 코드를 추출하여 알림(개발 단계 마지막에 한다)
  • 프로필에서 접점과 알림 사이의 관계, 즉 절단면
  • 을 성명한다.
  • 운행 단계(spring 프레임워크로 완성)
  • spring 프레임워크 모니터링 삽입점 방법의 실행일단 삽입점 방법이 실행되는 것을 감시하고 에이전트 메커니즘을 사용하여 목표 대상의 에이전트 대상을 동태적으로 만들고 알림 유형에 따라 에이전트 대상이 대응하는 위치에서 알림에 대응하는 기능을 짜서 완전한 코드 논리 운행을 완성한다.
    spring xml 기반 AOP 구성 단계:
  • 알림 bean도spring에 맡겨 관리하기;
  • aop:config 라벨을 사용하여 aop의 설정을 시작합니다.
  • aop:aspect 라벨을 사용하여 절단면 설정 (id 속성: 유일한 식별자,ref 속성: 알림 클래스 bean의 Id 지정)
  • aop:aspect의 내부에서 대응하는 탭을 사용하여 알림 형식을 설정합니다
  • 삽입점 표현식에 관하여:
  • 액세스 수식자는 생략할 수 있음
  • 반환값은 와일드카드 문자*로 임의의 반환값을 나타낼 수 있음
  • 패키지 이름은 임의의 패키지를 어댑터로 표시할 수 있지만 몇 개의 패키지가 있으면 몇 개의 *
  • 를 써야 한다.
  • 가방 이름 사용 가능...현재 가방 및 하위 가방 표시
  • 클래스와 방법명은 모두 *를 사용하여 조립할 수 있다
  • 사용 가능...매개 변수가 있든 없든 상관없음을 나타낸다. 매개 변수가 있으면 임의의 매개 변수 유형과 임의의 개수를 나타낼 수 있다
  • 실제 개발에서 착안점 표현식의 일반적인 쓰기 방법은 업무층 실현 클래스로 전환하는 모든 방법이다.
      * xx.xx.service.impl.*.*(..)
    유니버설 삽입점 표현식: 삽입점 표현식을 설정하고 aop:pointcut을 사용합니다. 이 탭은 aop:aspect 탭 밖에 쓰여 있습니다. 이 때 모든 단면을 사용할 수 있지만 앞에 쓰십시오.id 속성은 표현식의 유일한 표식에 사용되며,expression 속성은 삽입점 표현식의 내용을 지정하는 데 사용됩니다.
    aop:aspect 탭에서pointcut-ref 속성으로 수신합니다.
        <aop:config>
            <aop:pointcut id="pt1" expression="execution(* com.itheima.service.Impl.*.*(..))"/>
            <aop:aspect id="logAdvice" ref="txManager">
                <aop:before method="beginTransaction" pointcut-ref="pt1">aop:before>
                <aop:after-returning method="commit" pointcut-ref="pt1">aop:after-returning>
                <aop:after-throwing method="rollback" pointcut-ref="pt1">aop:after-throwing>
                <aop:after method="release" pointcut-ref="pt1">aop:after>
            aop:aspect>
        aop:config>

    spring의 순환 알림: spring 프레임워크는 코드에서 강화 방법이 언제 실행될지 수동으로 제어할 수 있는 방식을 제공합니다.
    그런데 왜 우리가 순환 알림을 설정한 후에 삽입점 방법은 실행되지 않았고 각종 알림 방법은 실행되었습니까?왜냐하면 밑에 있는 동적 에이전트의 순환 알림 코드에서 동적 에이전트의 순환 알림은 명확한 접근점 방법이 호출되고 우리가 설정한 방법이 없다는 것을 발견했기 때문이다.
    spring 메모 기반 AOP 구성 단계:
    @Aspect 주석은 이 클래스를 슬라이스 클래스로 선언합니다.
    @pointcut 설명 삽입점 표현식
    주석 AOP 설정을 사용할 때 일반적인 네 개의 알림이 호출 순서에 문제가 있지만, 순환 알림은 주석에 문제가 없기 때문에 사용할 수 있습니다.
    순수한 주석의 설정을 사용할 때, 설정 클래스에 이 주석을 추가하는 것을 주의하십시오 @Enable AspectJautoProxy (spring에서 주석 기반 AOP을 지원하도록 합니다)

    좋은 웹페이지 즐겨찾기