Spring AOP 가 배 운 좋 은 예 를 잘 이해 하면 배 울 수 있 을 거 예요!

10872 단어 springAOP

       블 로그 처음 써 봐!마음 은 여전히 매우 흥분 된다!물 은 별로 지만!하지만 나 는 지식의 전파 자!좋 은 글 을 여러분 께 공유 해 주 셨 으 면 좋 겠 습 니 다!
 
    자, 본론 으로 들 어가 우리 의  봄 op 의 즐 거 운 학습 여행!
     본문http://blog.csdn.net/udbnny/article/details/5870076
 
 
 
AOP 관련 용어 알 아 보기: 1. 알림 (Advice): 알림 은 절단면 이 무엇 인지, 언제 사용 하 는 지 정의 합 니 다.절단면 이 완성 해 야 할 일과 언제 이 일 을 수행 해 야 하 는 지 를 묘사 했다.2. 연결 점 (Joinpoint): 프로그램 이 알림 을 적용 할 수 있 는 '타 이 밍' 은 바로 연결 점 입 니 다. 예 를 들 어 방법 이 호출 되 었 을 때, 이상 이 던 져 졌 을 때 등 입 니 다.3. 착안점 (Pointcut) 알림 은 절단면 에서 발생 할 '이야기' 와 시간 을 정의 합 니 다. 그러면 착안점 은 '이야기' 가 발생 하 는 장 소 를 정의 합 니 다. 예 를 들 어 특정한 유형 이나 방법의 이름, Spring 에서 우리 가 편리 하 게 정규 표현 식 으로 지정 할 수 있 도록 합 니 다. 4. 절단면 (Aspect) 의 통지 와 착안점 은 공동으로 절단면 을 구성 합 니 다. 시간, 장소 와 발생 할 '이야기' 5. 도입(Introduction) 도입 기 존 클래스 에 새로운 방법 과 속성 을 추가 할 수 있 도록 합 니 다 (Spring 은 하나의 방법 으로 주입 하 는 기능 을 제공 합 니 다) 6. 목표 (Target) 즉 통 지 된 대상 입 니 다. AOP 가 없 으 면 그 논 리 는 다른 사무 논 리 를 교차 시 킬 것 입 니 다. AOP 가 있 으 면 자신 이 해 야 할 일 (AOP 가 사랑 하 는 일 을 시 키 는 것) 7. 대리 (proxy)알림 의 대상 을 사용 합 니 다. 자세 한 내용 은 디자인 모델 의 프 록 시 모드 8 을 참조 합 니 다. 뜨개질 (Weaving) 은 대상 에 게 절단면 을 적용 하여 새로운 프 록 시 대상 을 만 드 는 과정 입 니 다. 뜨개질 은 보통 다음 과 같은 몇 가지 시기 에 발생 합 니 다. (1) 컴 파일 할 때: 하나의 파일 이 컴 파일 될 때 뜨개질 을 합 니 다. 이것 은 특별한 컴 파일 러 가 필요 합 니 다. 예 를 들 어 AspectJ 의 뜨개질 컴 파일 러 (2)클래스 불 러 올 때: 특수 한 ClassLoader 를 사용 하여 대상 클래스 가 프로그램 에 불 러 오기 전에 클래스 의 바이트 코드 를 강화 합 니 다 (3)실행 시: 절단면 이 실 행 될 때 짜 여 져 있 습 니 다. SpringAOP 는 바로 이런 방식 으로 절단면 을 짜 는 것 입 니 다. 원 리 는 JDK 의 동적 대리 기술 인 Spring 을 사용 하여 AOP 를 실현 하 는 4 가지 방식 을 제공 한 것 입 니 다. 1. 전형 적 인 대리 기반 AOP 2. @ AspectJ 주해 구동 의 절단면 3. 순수한 POJO 절단면 4. 주입 식 AspectJ 절단면 은 먼저 전형 적 인 대리 기반 AOP: Spring 지원 5 를 봅 니 다.종류 알림: Before (전)  org. apringframework. aop. MethodBeforeAdvice After - returning (되 돌아 온 후) org. springframework. aop. After Returning Advice After - throwing (던 진 후) org. springframework. aop. ThrowAdvice Arround (주위) org. aopaliance. intercept. MethodInterceptor 소개 (도입) org. springframework. aop. IntroductionInterceptor
 
 
    위 에 있 는 것들 은 아무 도 보고 싶 어 하지 않 는 다. 그러나 이 부분 을 잘 배 우려 면 어 쩔 수 없 이 억지로 이 의 미 를 이해 해 야 한다.
op 어떻게 해요? 몇 단계 밖 에 안 돼 요!
1. 알림 만 들 기: 이 몇 개의 인 터 페 이 스 를 실현 하고 그 중의 방법 을 실현 합 니 다.
2. 접점 과 알림 을 정의 합 니 다: Spring 배합 파일 에 이 정 보 를 설정 합 니 다.
3. 프 록 시 팩 터 리 빈 을 사용 하여 프 록 시 생 성
 
----------------------  자다    --------------------------
(내 생각 에! it 를 배우 면 지식 을 죽 일 수 없다. 절대 안 되 는 것 은 사기 코드 다! 우 리 는 추상 적 인 지식 을 형상화 하여 더욱 잘 이해 할 수 있다)
 
 
 
   먼저 인 터 페 이 스 를 Sleepable 이 라 고 쓰 세 요. 이것 은 소 X 의 인터페이스 입 니 다. 잠 자 는 능력 을 가 진 모든 것 이 이 인터페이스 (생물 뿐만 아니 라 전원 끄 기 옵션 의 휴면 포함) 의 코드 를 실현 할 수 있 습 니 다!
 인터페이스 Sleepable
package com.spring.aop.bean;

<pre class="java" name="code">package com.spring.aop.bean;

public interface Sleepable {
	
	public void sleep();

}
 
 


然后写一个Human类,他实现了这个接口

 

 

Human类

package com.spring.aop.bean;

public class Human implements Sleepable {

	public void sleep() {
		// TODO Auto-generated method stub
        System.out.println("   ! !   。。。Z 。zzz。       ");
	}

}

       자, 이것 은 주인공 이지 만 잠 자기 전에 보조 업 무 를 해 야 한다. 가장 기본 적 인 것 은 옷 을 벗 고 잠 을 이 루 지 못 하 는 사람 은 수면 제 를 먹 어야 한다. 그러나 이런 동작 과 순수한 잠 이라는 '업무 논리' 이다.상관 없습니다. 이 코드 들 을 모두 sleep 방법 에 넣 으 면 단일 한 직책 에 어 긋 나 지 않 습 니까? 이 럴 때 는 AOP 가 필요 합 니 다. SleepHelper 류 를 만 듭 니 다. 잠 자 는 보조 작업 이 포함 되 어 있 습 니 다. AOP 용어 로 는 위의 인 터 페 이 스 를 실현 해 야 합 니 다.
 
SleepHelper 클래스
package com.spring.aop.bean;

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;

public class SleepHelper implements MethodBeforeAdvice, AfterReturningAdvice {

	public void afterReturning(Object arg0, Method arg1, Object[] arg2,
			Object arg3) throws Throwable {
		// TODO Auto-generated method stub
		
		System.out.println("   !   !   !   !");

	}

	public void before(Method arg0, Object[] arg1, Object arg2)
			throws Throwable {
		// TODO Auto-generated method stub
		System.out.println("   !   ,   !   !");

	}

}

 
그리고 spring 프로필 에서 설정 합 니 다:
 
<bean id="sleepHelper" class="test.spring.aop.bean.SleepHelper">
</bean>

OK! 이제 알림 을 만 드 는 작업 이 완료 되 었 습 니 다. 두 번 째 단 계 는 설정 입 니 다. 이것 은 매우 아 픈 작업 입 니 다. 특히 이렇게 더 운 날 에 Spring 은 물건 의 이름 을 귀신 처럼 길 게 지 었 습 니 다. 그것 은 왜 usr 와 같은 스타일 이 되 지 못 합 니까? 먼저 접점 을 설정 해 야 합 니 다. 접점 의 표현 방식 은 Spring 에 여러 가지 가 있다 고 합 니 다. 하지만 자주 사용 하 는 것 은 두 가지 뿐 입 니 다. 1.정규 표현 식 2. AspectJ 표현 식 AspectJ 를 사용 하 는 것 에 익숙 하지 않 습 니 다.
 
<bean id="spleepPointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut">
  <property name="pattern" value=".*sleep"/>
</bean>

pattern 속성 은 정규 표현 식 을 지정 합 니 다. 모든 sleep 방법 과 일치 하 는 절 점 은 이야기 가 발생 하 는 장소, 그리고 이야기 가 발생 하 는 시간 과 가장 중요 한 이야기 의 내용 을 정의 하 는 것 입 니 다. 바로 알림 입 니 다. 우 리 는 알림 과 절 점 을 결합 시 켜 야 합 니 다. 우리 가 사용 해 야 할 알림 자 는 org. springframework. aop. support. Default PointcutAdvisor 입 니 다.
<bean id="sleepHelperAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
     <property name="advice" ref="sleepHelper"/>
     <property name="pointcut" ref="sleepPointcut"/>
</bean>

접근 점 과 알림 설정 이 완료 되 었 습 니 다. 다음 프 록 시 Factory Bean 을 호출 하여 프 록 시 대상 을 만 듭 니 다.
<bean id="humanProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
     <property name="target" ref="human"/>
     <property name="interceptorNames" value="sleepHelperAdvisor" />
     <property name="proxyInterfaces" value="test.spring.aop.bean.Sleepable" />
</bean>

 
이상 은 프로필 의 내용 입 니 다!
Proxy Factory Bean 은 프 록 시 인터페이스 에서 지정 한 인 터 페 이 스 를 실현 하 는 프 록 시 대상 으로 변환 할 수 있 는 에이전트 입 니 다.
 
 
 
 
다음은 진정한 기적 을 보 여줄 때 다!
 
TestAOP 클래스
package com.spring.aop.bean;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestAOP {
	
	public static void main(String[] args) {
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		Sleepable sleeper = (Sleepable) ac.getBean("human");
		sleeper.sleep();
	}

}

실현 후 출력
 
 
옷 을 벗 어 라! 잠 을 자고 거품 을 뚫 어 라! 비교 하지 마라! 잠 을 이 루 지 못 한다! 아이고! 양 한 마리 가... Z. zzz. 꿈속 에서 옥 처럼 옷 을 입는다! 밥 을 먹는다! 거품 을 뚫 어 라! 비교 하지 마라!
 
OK!
       이것 은 우리 가 원 하 는 결과 입 니 다. 그러나 위의 과정 은 약간 복잡 한 것 같 습 니 다. 특히 설정 접점 과 알림, Spring 은 자동 대리 기능 을 제공 하여 접점 과 알림 이 자동 으로 일치 하도록 할 수 있 습 니 다. 설정 파일 을 수정 하 는 것 은 다음 과 같 습 니 다.
                                                  원래 설정 은 주석 이 필요 합 니 다.
 <bean id="sleepHelper" class="test.spring.aop.bean.SleepHelper">
  </bean>
  <bean id="sleepAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
    <property name="advice" ref="sleepHelper"/>
    <property name="pattern" value=".*sleep"/>
  </bean>
  <bean id="human" class="test.spring.aop.bean.Human">
  </bean>
 <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>

성공 출력 결 과 는 앞 과 같 습 니 다!
 
 
        org. spring framework. aop. framework. autoproxy. default Advisor AutoProxy Creator (내 가 졸 랐 는데 이름 이 너무 길 어) 를 설명 하면 방법 에 맞 는 bean 자동 으로 대 리 를 만 들 수 있 습 니 다!        그래도 해 야 할 일이 많 고 더 쉬 운 방법 이 있 나 요?     있다!!!!!
 
본인 은 게 을 러 서 바로 붙 여 넣 었 어 요. 복사!
 
 
한 가지 방식 은 AspectJ 가 제공 하 는 주 해 를 사용 하 는 것 입 니 다. package test. mine. spring. bean, import org. aspectj. lang. annotation. after Returning, import org. aspectj. lang. annotation. Aspect, import org. aspectj. lang. annotation. Before, import org. aspectj. lang. annotation. Pointcut; @ Aspect public class SleepHelper {    public SleepHelper(){              }          @Pointcut("execution(* *.sleep())")     public void sleeppoint(){}          @Before("sleeppoint()")     public void beforeSleep(){         System. out. println ("자기 전에 옷 을 벗 어야 합 니 다!");    }          @AfterReturning("sleeppoint()")     public void afterSleep(){         System. out. println ("자고 일어나 면 옷 을 입 어야 해!");    }      } @ Aspect 의 주석 으로 절단면 을 표시 합 니 다. 누락 되 지 않도록 주의 하 십시오. 그렇지 않 으 면 Spring 이 대 리 를 만 들 때 찾 을 수 없습니다. @ Pointcut 주석 은 접점 을 지 정 했 습 니 다. @ Before 와 @ AfterReturning 은 실행 중인 알림 을 지 정 했 습 니 다. 주석 에 접점 의 이름 을 입력 한 후에 저 희 는 Spring 설정 파일 에 공 을 들 여야 합 니 다. 먼저 AOP 의 XML 네 임 스페이스 와 성명 을 추가 하 는 것 입 니 다.schema 네 임 스페이스 닫 기: xmlns: aop = "http://www.springframework.org/schema/aop"schema 선언:http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd 그리고 이 탭 을 추가 합 니 다: < op: aspectj - autoproxy/> 이 Spring 이 있 으 면 @ Aspect 에 표 시 된 절단면 을 자동 으로 검색 할 수 있 습 니 다. 마지막 으로 실행 되 고 간단 하고 편리 합 니 다: Public class Test {    public static void main(String[] args){         ApplicationContext appCtx = new ClassPathXmlApplicationContext("applicationContext.xml");         Sleepable human = (Sleepable)appCtx.getBean("human");         human.sleep();     } } 다음은 마지막 으로 자주 사용 하 는 AOP 실현 방식 을 살 펴 보 겠 습 니 다. Spring 을 사용 하여 순수한 POJO 절단면 을 정의 하기 전에 우 리 는 < aop: aspectj - autoproxy/> 라벨 을 사 용 했 습 니 다. Spring 은 aop 의 네 임 스페이스 에서 다른 설정 요 소 를 제공 합 니 다. < aop: advisor > 는 AOP 통지 자 를 정의 한 후 < aop: after > 알림 < aop: after - returning > 을 되 돌려 준 후에 < aop: after - throwing > 을 던 진 후에 알 립 니 다.알림 < aop: around > 주위 알림 < aop: aspect > 는 절단면 < aop: before > 전 알림 < aop: config > 최고급 설정 요 소 를 정의 합 니 다. < beans > 와 같은 것 < aop: pointcut > 은 접점 을 정의 합 니 다. 우 리 는 AOP 태그 로 잠 을 자 는 과정 을 정의 합 니 다. 코드 는 변 하지 않 습 니 다. 설정 파일 만 수정 하고 AOP 설정 을 추가 하면 됩 니 다. < aop: config >                끝! OK ~ ~ 기본적으로 이렇게 많 죠? 잘 쓰 려 면 많이 고생 해 야 돼 요. 따로 AspectJ 를 해 야 돼 요 ~ 그냥 노 는 거 아니에요! 
 
 
    
 
 
 

좋은 웹페이지 즐겨찾기