봄의 측면 소개

스프링 측면이란 무엇입니까? 😲



간단히 말해서, 런타임에 애플리케이션(Pointcuts에 의해 정의됨)의 특정 부분(joinPoint)에 주입되는 재사용 가능한 코드(Advice) 부분입니다.

왜 사용합니까? 🤨



애플리케이션 전반에 걸친 일반적인 문제를 해결합니다.

무엇처럼?


  • 로깅 📝
  • 거래 관리 🗄
  • 캐싱 🔗
  • 보안 🔐

  • Spring 프레임워크의 모든 곳에서 사용됩니다.


  • AOP(Aspect Oriented Programming)는 Spring 프레임워크가 구축되는 두 가지 핵심 개념 중 하나이며 두 번째는 종속성 주입입니다.



  • Spring Aspects 뒤에 있는 에이전트를 알아보자 🥷🏽



    조인포인트 🔧


  • 조인포인트는 애스펙트가 플러그인될 수 있는 애플리케이션의 프로그램 실행에서 후보 포인트입니다.
  • 이 지점은 메서드가 호출되거나 예외가 발생하거나 필드가 수정될 수 있습니다.
  • 이것은 새로운 동작을 추가하기 위해 애플리케이션의 정상적인 흐름에 관점의 코드를 삽입할 수 있는 지점입니다.

  • 조언 📖


  • pointcut에 의해 지정된 joinpoint에서 수행할 작업을 나타내는 시스템 전체 문제(로깅, 보안 검사 등...)를 해결하는 코드입니다.

  • 포인트컷 📌


  • pointcut은 어떤 joinpoint에서 관련 Advice가 적용되어야 하는지를 정의하는 표현식입니다.

  • 측면 🔍


  • Aspect는 관점의 동작을 정의하는 클래스와 관점이 실행되어야 하는 위치를 정의하는 포인트컷입니다.



  • 코딩할 준비가 되셨습니까? 🤩



    특정 메서드 호출 시 콘솔에 무언가를 기록하는 간단한 사용 사례를 작성해 보겠습니다.



    AOP에 대한 maven 종속성을 추가하여 시작하겠습니다.

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
    


    그런 다음 클래스를 만들고 @Aspect 주석을 달아 이 클래스에 Advice 메서드와 Pointcuts가 포함될 것임을 표시해 보겠습니다.
    Spring에서 관리할 수 있도록 @Component로 주석을 달아야 합니다.

    이 클래스는 콘솔에 로깅하는 간단한 작업을 처리합니다.

    @Component
    @Aspect
    public class LoggingAspect {
        @Pointcut("@annotation(Loggable)")
        public void logAllMethodCallsPointcut(){    
        }
        @Before("logAllMethodCallsPointcut()")
        public void logAllMethodCallsAdvice(){
            System.out.println("From Aspect");
        }
    }
    


    기록 가능한 주석을 생성해야 합니다.

    @Target(ElementType.METHOD)  
    @Retention(RetentionPolicy.RUNTIME)  
    public @interface Loggable {  
    }
    



    우리가 방금 무엇을 썼습니까? 👀


  • @Pointcut("@annotation(Loggable)")logAllMethodCallsPointcut 주석이 달린 모든 메서드에 대한 포인트컷으로 Loggable 메서드를 선언합니다.
  • @Before("logAllMethodCallsPointcut()")logAllMethodCallsAdvice 주석이 달린 메서드보다 먼저 호출될 Loggable 조언을 선언합니다.

  • 이제 우리의 조인 포인트 역할을 할 서비스를 만들어 봅시다 🧠




    @Service  
    public class HomeService {  
      @Loggable
      // this here is what's called a join point  
      public void homePage(){  
            System.out.println("From Service");  
        }  
    }
    


    이제 homePage 메서드를 호출할 때 logAllMethodCallsAdvice 어드바이스 메서드가 그 전에 호출됩니다.

    그래서 우리는 다음 로그를 볼 것입니다 👇



    From Aspect
    From Service




    왜 우리가 이것을 하고 있는지 상기시켜 주십시오. 😢



    이 예제는 우리가 가지고 있는 간단한 경우에는 쓸모가 없어 보이지만, 그것에 대해 무언가를 기록하려는 수백 가지 메서드가 있는 시스템이 있다고 상상해 보십시오.
  • 모든 사람 앞에서 같은 코드를 호출하시겠습니까? 🤔
  • 로깅 프로세스의 구현을 변경하려는 경우 어떻게 됩니까?
  • 모든 용도를 검색하고 변경해야 합니다 😖

  • 또는 서비스를 만들고 모든 곳에서 호출할 수 있지만 로깅 외에 더 많은 것이 있다고 상상해 보십시오.
  • 모두를 위한 별도의 서비스를 만들고 호출해야 합니다 😤


  • 측면은 이제 볼 수 있듯이 생명의 은인입니다. 😍😍




    결론 🙌


  • Aspect는 Spring 프레임워크의 가장 중요한 개념 중 하나입니다.
  • 이것은 매우 편리하며 깨끗한 재사용 가능한 코드를 위한 수단을 제공합니다.
  • 광범위한 사용 사례가 있습니다(로깅만 논의함).



  • 자세한 내용은 이 풍부한 리소스를 확인하세요 🤝 .



    GitHub 💻의 소스 코드 .

    좋은 웹페이지 즐겨찾기