AOP(Aspect-Oriented 프로그래밍) 관점 지향 프로그래밍은 OOP와 완전히 다릅니다. AOP를 사용하면 프로그래밍 시스템이 OOP의 객체가 아닌 관점 또는 관심사로 구분됩니다.
AOP 소개
OOP 객체지향을 사용하면 코드 중복이 불가피하며, 객체지향 프로그래밍을 사용하면 이러한 중복을 피할 수 없습니다. 예를 들어, 사용자 권한을 판단할 때 해당 권한에 따라 해당 메소드를 실행하십시오. 서블릿에서 인코딩 형식을 설정할 때 동일한 코드가 여러 번 나타나므로 작성하는 것을 잊어버리기 쉽습니다. 잘못된 코드를 실행하면 결과가 나타납니다. 이러한 코드 중복은 코딩을 번거롭게 할 뿐만 아니라 유지 관리도 어렵게 만듭니다. AOP는 이러한 코드를 정리하고, 특정 측면의 문제를 해결하는 코드를 특정 모듈에 별도로 넣은 후 프로그램에 엮어냅니다.
AOP 용어
Aspect: 크로스커팅 기능,
추상 클래스 또는 인터페이스, AOP 프로그래밍에서 중요한 것은 교차 기능이 식별됩니다.
(측면, 문자 인코딩 기능과 유사)
조언: 크로스커팅 기능의 구체적인 구현은 대상 객체가 동작하기 전인지, 동작한 후인지를 토대로 분석해야 합니다. 수술 후
조언입니다.
(향상, 문자 인코딩 필터와 유사)
포인트컷: 진입점, 크로스커팅 기능 적용의 한계를 설명하며, 모든 프로세스가 필요한 것은 아니며, 사용할 수 있는 프로세스가 진입점이다
(유사) 필터 일치 규칙 /*)
Joinpoint: 연결 지점 또는 구성 요소가 속성 설정, 메서드 호출 등과 같은 프로세스에 조인하는 시간입니다. Spring은 메서드 호출에 대한 연결 지점만 지원하는 반면 일부 다른 프레임워크는 연결 속성을 지원합니다. AspectJ,
(필터 REQUEST, FORWARD와 유사한 필터 규칙)
Weave: 스티칭(Stitching), 비즈니스 프로세스에 구성 요소를 적용하는 프로세스를 스티칭(Stitching) 또는 위빙(Weaving)이라고 합니다.
(웹에 필터를 구성하는 과정과 유사합니다. CGLIB를 사용할 수 있습니다. (상속을 사용하여 프록시 작업이 완료됩니다.)
비즈니스 운영의 대상, 대상, 실제 객체
예: 문자 인코딩 형식을 설정하는 것은 Aspect로 간주되고, 인터셉터는 Advice Enhancement로 간주됩니다.
<!-- 字符编码过滤器--> <filter> <filter-name>characterFilter</filter-name> <filter-class>com.bjpowernode.egov.filter.CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>characterFilter</filter-name> <url-pattern>/servlet/*</url-pattern> </filter-mapping>필터 클래스
public class CharacterEncodingFilter implements Filter { @Override public void destroy() {} @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChainchain) throws IOException, ServletException { request.setCharacterEncoding("GB18030"); chain.doFilter(request,response); } @Override publicvoid init(FilterConfig filterConfig) throws ServletException {} }이렇게 하면 각 서블릿에서 인코딩을 설정할 필요가 없습니다. .
<!--声明目标类--> <bean id="targetclass" class="com.spring.aop.TargetClass"></bean> <!--声明扩展类--> <bean id="extendsclass" class="com.spring.aop.extendsClass"></bean> <!--织入扩展类,并声明在哪个方法上执行扩展类--> <aop:config> <aop:aspect id="extendAspect" ref=""> <aop:pointcut expression="execution(public ** (..))" id="extendsPoincat"> <!--在目标方法执行前执行的方法--> <aop:before method="beforemethod" pointcut-ref="extendsPoincat" /> <!--在目标方法执行后执行的方法--> <aop:after method="aftermethod" pointcut-ref="extendsPoincat" /> </aop:aspect> </aop:config>5. 테스트가 성공하면 대상 클래스의 대상 메서드 targetmethod()를 실행할 때 확장 클래스의 beforemethod() 메서드가 먼저 실행된 다음 대상 메서드가 실행됩니다. , 그리고 마지막으로 () 메소드입니다.
즉, 확장 클래스의 두 메서드 프레임워크는 실행 중에 구성 파일을 읽고 해당 정보를 얻은 다음 확장 메서드를 자동으로 추가하기만 하면 됩니다. .
이 테스트는 확실히 성공했습니다. 믿을 수 없다면 직접 시도해 보세요.
Spring 프레임워크에서 AOP를 사용할 때의 장점
Aop는 Spring의 IOC 컨테이너와 통합되어 향상되었으며 진입점은 모두 Javabean이므로 동일한 파일에서 구성할 수 있습니다.
Spring의 다른 부분과 마찬가지로 , 서로 다른 애플리케이션 서버 간 이식 가능
Spring은 Aop의 가로채기 인터페이스를 구현하므로 사용자가 특정 가로채기 인터페이스에 바인딩할 필요가 없습니다.
Aop의 측면 지향 프로그래밍 아이디어는 객체 지향 방식을 깨뜨립니다. 우리가 배워야 할 것은 AOP의 사용법뿐만 아니라 측면지향적 사고도 배워야 합니다.
위 내용은 Spring Framework 학습(6) AOP 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!