Spring IOC 및 AOP 원리에 대한 자세한 설명
IoC(Inversion of Control)
(1) IoC(Inversion of Control)는 전통적인 방식이 아닌 컨테이너 제어 프로그램 개체 간의 관계를 나타냅니다. 구현은 프로그램 코드에 의해 직접 제어됩니다. 제어가 애플리케이션 코드에서 외부 컨테이너로 이전되는 것을 반전이라고 합니다. Spring의 경우 Spring은 개체의 수명 주기를 제어하며 IoC에는 "종속성 주입"이라는 또 다른 이름이 있습니다. 이름에서 알 수 있듯이 소위 종속성 주입은 구성 요소 간의 종속성이 런타임 중에 컨테이너에 의해 결정되는 것을 의미합니다. 즉, 컨테이너가 특정 종속성을 구성 요소에 동적으로 주입합니다.
(2) Spring이 작동하는 방식으로 모든 클래스가 Spring 컨테이너에 등록되어 Spring이 무엇인지, 필요한 것이 무엇인지 알려주고 시스템이 적절하게 실행될 때 Spring이 원하는 것을 제공합니다. 그들 자신의 주도로 당신에게 주어지며, 또한 당신을 필요로 하는 다른 일에도 당신을 제공합니다. 모든 클래스의 생성과 소멸은 스프링에 의해 제어됩니다. 즉, 객체의 수명 주기는 더 이상 이를 참조하는 객체에 의해 제어되지 않고 스프링에 의해 제어됩니다. 이전에는 특정 객체에 대해서는 다른 객체를 제어했지만 이제는 모든 객체가 스프링에 의해 제어되므로 이를 제어 역전이라고 합니다.
(3) 시스템 작동 중에 객체에 필요한 다른 객체를 동적으로 제공합니다.
(4) 의존성 주입 아이디어는 클래스를 인스턴스화할 때 클래스의 set 메서드를 호출하여 이전에 HashMap에 저장된 클래스 속성을 클래스에 주입합니다. 전체적으로 전통적인 객체 생성 방법에서는 호출자가 호출 수신자의 인스턴스를 생성하는 경우가 많습니다. Spring에서는 호출 수신자를 생성하는 작업이 Spring에 의해 완료되고 호출자가 주입되는데, 이것이 소위 종속성입니다. 주입 또는 제어 반사. 주입 방법에는 종속성 주입과 설정 주입의 두 가지가 있습니다. IoC의 장점은 구성 요소 간의 결합을 줄이고 비즈니스 개체 간 교체의 복잡성을 줄이며 개체를 유연하게 관리할 수 있다는 것입니다.
AOP(관점 지향 프로그래밍)
(1) AOP 관점 지향 프로그래밍은 IoC를 기반으로 하며 OOP에 대한 유용한 보완입니다.
(2) AOP는 "크로스 커팅"이라는 기술을 사용합니다. profile 캡슐화된 객체의 내부 압축을 풀고 여러 클래스에 영향을 미치는 공개 동작을 재사용 가능한 모듈로 캡슐화하고 이름을 "Aspect", 즉 관점으로 지정합니다. 간단히 말해서 소위 "측면"은 비즈니스와 관련이 없지만 로깅과 같이 비즈니스 모듈에 의해 공동으로 호출되는 논리 또는 책임을 캡슐화하여 시스템의 코드 중복을 줄이는 것입니다. , 모듈 간의 결합을 줄이고 향후 운용성과 유지 관리성에 도움이 됩니다.
(3) AOP는 수평 관계를 나타냅니다. "객체"는 객체의 속성과 동작을 캡슐화하는 속이 빈 원통에 비유됩니다. 측면 지향 프로그래밍 방법은 이 원통을 측면으로 선택적으로 변환하는 것입니다. 비즈니스 로직을 제공합니다. 그리고 절단된 단면은 소위 "측면"입니다. 그런 다음 이러한 절단된 부분을 놀라운 기술로 복원하여 흔적을 남기지 않고 효과를 완성했습니다.
(4) AOP를 구현하는 기술은 주로 두 가지 범주로 나뉩니다. 하나는 동적 프록시 기술을 사용하여 메시지를 가로채서 원래 객체 동작의 실행을 대체하는 것이고, 다른 하나는 정적을 사용하는 것입니다. 위빙 방법은 "측면"을 생성하기 위한 특정 구문을 도입하므로 컴파일러는 컴파일 중에 "측면"과 관련된 코드를 위빙할 수 있습니다.
(5) Spring은 AOP를 구현합니다: JDK 동적 프록시 및 CGLIB 프록시 JDK 동적 프록시: 해당 프록시 객체는 런타임 중에 인터페이스의 구현 클래스를 생성하여 대상 객체의 프록시를 완료해야 합니다. ; 두 가지 핵심 클래스는 InvocationHandler와 Proxy입니다. CGLIB 프록시: 구현 원칙은 런타임 중에 생성되는 프록시 객체가 대상 클래스에 대해 확장된 하위 클래스라는 점을 제외하면 JDK 동적 프록시와 유사합니다. CGLIB는 효율적인 코드 생성 패키지로, 바이트코드를 작동하기 위해 ASM(오픈 소스 Java 바이트코드 편집 클래스 라이브러리)을 사용하여 구현됩니다. 이 패키지의 성능은 asm.jar 및 cglib.jar 패키지를 도입해야 합니다. . AspectJ가 주입한 측면과 @AspectJ 주석 기반 측면을 사용하면 실제로 하위 수준의 동적 프록시를 통해 구현됩니다.
(6). AOP 사용 시나리오:
인증 권한 확인
캐싱 캐싱
컨텍스트 전달
오류 처리 오류 처리
지연 로딩
디버깅 디버깅
로깅, 추적, 프로파일링 및 모니터링
성능 최적화, 효율성 확인
리소스 풀링 리소스 풀링또한 Filter 구현과 Struts2 인터셉터 구현은 모두 AOP 아이디어의 표현입니다.
Java Tutorial
"위 내용은 Spring IoC 및 AOP 원칙에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!