프로 그래 밍 이 새 롭 고 비 싼 AOP, 당신 이 알 수 밖 에 없 는 일.
AOP 는 Aspect Oriented Programming 의 줄 임 말로 절단면 프로 그래 밍 (측면 지향) 을 뜻 하 며, 사전 컴 파일 방식 과 런 타임 동적 프 록 시 를 통 해 현재 소스 코드 를 수정 하지 않 은 상태 에서 프로그램 동적 동의 에 기능 을 추가 할 수 있 는 기술 입 니 다.AOP 는 실제 적 으로 GoF 디자인 모델 의 연장 이 고 디자인 모델 이 꾸준히 추구 하 는 것 은 호출 자 와 피 호출 자 간 의 결합 이다. AOP 는 이런 목표 의 실현 이 라 고 할 수 있다.
주로 로그 기록, 성능 통계, 안전 제어, 사무 처리, 이상 처리 등에 응용 할 수 있다.로그 기록, 성능 통계, 안전 제어, 사무 처리, 이상 처리 등 코드 를 업무 논리 코드 에서 구분 하고 이러한 행위 에 대한 분 리 를 통 해 우 리 는 이 를 비 지도 업무 논리 적 방법 으로 독립 시 켜 이런 행 위 를 바 꿀 때 업무 논리 에 영향 을 주지 않 는 코드 로 바 꾸 기 를 원한 다.
AOP 는 Spring 에서 풍부 한 지 지 를 받 았 고 응용 대상 은 그들 이 해 야 할 일 인 업무 논 리 를 완성 하 는 것 만 실현 했다.로그 나 사물 지원 등 다른 시스템 급 관심 사 는 책임 지지 않 습 니 다.
이런 것들 이 있 기 때문에 저 는 이에 대해 좋 은 시스템 을 설계 하면 완벽 한 시스템 을 만 들 수 있다 고 이해 합 니 다.그들 은 일 을 고려 할 필요 가 없고 로 그 를 고려 할 필요 가 없다. 안전 을 고려 할 필요 가 없고 성능 을 고려 할 필요 가 없다. 단지 자신 이 실현 한 일부 업무 논리 에 만 관심 을 가지 면 된다.
그럼 AOP 와 OOP 는 어떤 차이 점 과 연락 이 있 나 요?
AOP 는 OOP 에 대한 좋 은 보충 이 라 고 할 수 있다.우리 가 평소에 프로 그래 밍 을 하 는 과정 에서 일부 코드 를 만 날 수 밖 에 없다. 이런 코드 들 은 우 리 는 하나의 부모 류 나 방법 으로 추상 화 할 수 없다. 왜냐하면 그들 은 각 유형의 구석, 각 유형의 변 각 에 분포 되 어 있 기 때문이다.
소프트웨어 개발 에서 가장 중요 한 사상 은 세 번 이상 쓴 코드 에 대해 추상 화 할 수 있 는 지 를 고려 해 야 한 다 는 것 이다. 우리 가 다시 복사 해서 붙 일 때 우 리 는 이미 생각 을 잃 었 다.
바로 이런 사상 때문에 끊임없이 새로운 명사 들 이 우리 의 시야 로 몰 려 들 었 다. 관상 과정 에서 관상 대상, 그리고 현재 의 관상 절단면 까지 이런 명사 들 의 등장 은 우리 의 코드 가 한 걸음 한 걸음 줄 어 들 지 않 고 반대로 시스템 의 복잡 도가 높다 는 것 이다.하나의 기능 은 더 이상 하나의 모듈 만 완성 할 수 있 는 것 이 아니 라 여러 가지 유형 을 호출 해 야 하나의 기능 을 완성 할 수 있다.일체 형 주택 에서 블록 형 주택 을 짓 는 과도 함 을 실현 했다.
그래서 AOP 와 OOP 는 대립 하 는 것 이 아니 라 좋 은 보충 일 뿐이다.OOP 는 AOP 없 이 시스템 을 만 들 수 있 지만 있 으 면 코드 구조 가 더욱 뚜렷 해진 다.AOP 가 OOP 의 지원 이 부족 하 다 면 그 존 재 는 그렇게 많은 가치 가 없다 고 할 수 있다.
이렇게 시끌벅적 하 게 말 하면 AOP 는 도대체 어떻게 개발 해 야 합 니까?
1. 절단면 을 발견 하면 관심 사 라 고도 부 릅 니 다. 이것 도 가장 중요 한 것 입 니 다. 발견 하 는 비결 은 바로 3 편리 가 아 닌 코드 를 찾 는 것 입 니 다.
2. 관심 사 를 실현 하 라. 쉽게 말 하면 3 변 이 아 닌 코드 를 한 가지 유형 에 넣 는 것 이다.
3. 그룹의 관심 사 는 관심 사 를 언제 실행 할 것 인 지 를 확정 하 는 것 이다.예 를 들 어 관심 사 에 세 가지 동작 이 있 습 니 다. 이 세 가지 동작 은 특정한 방법 에서 성공, 실패, 이상 하 게 실 행 된 것 입 니 다. 그러면 간단하게 설정 하면 됩 니 다.
다음은 하나의 예 시 를 통 해 AOP 를 어떻게 개발 하 는 지 설명 하 겠 습 니 다. (각각 주석 과 프로필 을 통 해 이 루어 집 니 다)
인터페이스 와 구현 클래스:
public interface UserManager {
public void addUser(String username,String password);
}
public class UserManagerImpl implements UserManager {
@Override
public void addUser(String username, String password) {
System.out.println("UserManagerImpl.addUser()");
}
}
주해 방식 으로 실현:
@Aspect //
public class SecurityHandler {
/**
* Pointcut,Pointcut addAddMethod(),
* ,
*/
@Pointcut("execution(* add*(..))") //
private void addAddMethod(){};
/**
* Advice, Advice Pointcut Joinpoint
*/
@Before("addAddMethod()") //
//@After("addAddMethod()")
private void checkSecurity() { //
System.out.println("-------checkSecurity-------");
}
}
설정 파일 방식 으로 구현 (상기 클래스 의 주석, addAddMethod 방법 을 제거 하고 applicationContext. xml 에서 설정):
<!-- AOP -->
<aop:aspectj-autoproxy />
<bean id="userManager" class="com.jianxin.spring.UserManagerImpl" />
<bean id="securityHandler" class="com.jianxin.spring.SecurityHandler"/>
<aop:config>
<aop:aspect id="securityAspect" ref="securityHandler">
<aop:pointcut id="addAddMethod" expression="execution(* add*(..))"/>
<aop:before method="checkSecurity" pointcut-ref="addAddMethod"/>
</aop:aspect>
</aop:config>
테스트 프로그램
public class Client {
public static void main(String[] args) {
BeanFactory factory=new ClassPathXmlApplicationContext("applicationContext.xml");
UserManager userManager=(UserManager)factory.getBean("userManager");
userManager.addUser(" ", "123");
}
}
이로써 예 시 는 완성 되 었 고 마지막 으로 AOP 가 있 으 면 OOP 는 더욱 완벽 해 보인다.AOP 는 서비스 적 인 일 을 더 많이 하고 OOP 는 주요 업 무 를 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.