Spring AOP 순 주해 실현
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
설정 클래스 와 절단면 클래스 를 작성 합 니 다.
@Aspect//
@Configuration//
@EnableAspectJAutoProxy// AOP
@ComponentScan("com.xiehetao")//
public class SpringAop {
@Pointcut("execution(* com.xiehetao.*.*(..))")
public void pj(){
}
@Before("pj()")
public void sayHi(){
System.out.println("2");
}
@After("pj()")
public void sayHello(){
System.out.println("5");
}
@AfterReturning("pj()")
public void sayGood(){
System.out.println("6");
}
@AfterThrowing("pj()")
public void sayNo(){
System.out.println("6");
}
@Around("pj()")
// , ,
public int process(ProceedingJoinPoint joinPoint){
System.out.println("1");
int obj=0;
try{
obj = (Integer)joinPoint.proceed();
System.out.println("4");
}catch (Throwable e){
return 7;
}
return obj;
}
}
피 강화 류
@Component
public class Girl /*implement Student*/{
// ,java JDK , cglib
public int dance(){
System.out.println("3");
int i=1/0;//
return 7;
}
}
interface Student {
int dance();
}
테스트 클래스
@RunWith(SpringJUnit4ClassRunner.class)//junit spring
@ContextConfiguration(classes={
SpringAop.class})// , , locations
public class test {
@Autowired
private Girl girl;
//private Student girl;// jdk , , ,
@Test
public void Test(){
System.out.println(girl.dance());
// System.out.println(ans);
}
}
요약: 순 주해 방식 개발 AOP 절차: 1. 의존 패키지 spring - aop, spring - context, spring - aspects, spring - test, junit (후 두 개 는 유닛 테스트 에 사용) 2. 주해 류 (xml 파일 에 해당 함) 를 표시 하고 스 캔 패키지 경 로 를 추가 하 며 절단면 을 추가 하고 AOP 동적 대 리 를 추가 합 니 다.(두 가지 프 록 시 방식 이 있 습 니 다. 하 나 는 JDK 동적 프 록 시 입 니 다. 인 터 페 이 스 를 실현 하 는 방식, 하 나 는 CGlib 입 니 다. 클래스 를 통 해 이 루어 지지 만 final 클래스 를 강화 할 수 없습니다) 3. advice (알림) 를 작성 합 니 다.알림 은 다섯 가지 가 있 습 니 다. 전치, 후 치, 복귀 후 치, 이상 알림, 서 라운드 알림 의 실행 순 서 는 클래스 에서 우선 서 라운드 알림 을 숫자 로 표시 한 다음 에 후 치 알림 은 리 턴 후 치 와 이상 알림 전에 서 라운드 알림 을 사용 하 는 것 을 권장 합 니 다. 4. JDK 동적 대리 와 cglib 동적 대리 에 대해 JDK 동적 대리 방식 으로 이 루어 지 기 를 원한 다 면 테스트 했 습 니 다.인 터 페 이 스 를 정의 한 다음 에 이 인 터 페 이 스 를 실현 합 니 다. 테스트 할 때 주입 대상 은 인터페이스 유형 이 어야 합 니 다. (클래스 를 실현 하 는 방식 으로 주입 하면 오류 가 발생 할 수 있 습 니 다. @ Autowired 검색 은 유형 에 따라 찾 습 니 다. girl 은 두 가지 유형 이 있 습 니 다. 하 나 는 인터페이스 유형 이 고 하 나 는 실체 유형 입 니 다)오류 유형: 'com. xiehetao. test' 라 는 이름 의 bean 을 만 드 는 중 오류 가 발생 했 습 니 다. 필드 'girl' 을 통 해 표 현 된 불만 족 스 러 운 의존성; 중첩 예 외 는 org. springframework. beans. factory. BeanNotOFRequiredTypeException: Bean named 'girl' 은 'com. xiehetao. Girl' 유형 이 될 것 으로 예상 되 지만 실제로는 'com. sun. proxy. $Proxy 29' 유형 이 었 습 니 다.cglib 동적 에이전트 방식 으로 구현 되 기 를 바 랍 니 다. 클래스 를 직접 실현 하면 됩 니 다. 여기 자바 는 자동 으로 판단 합 니 다. 그런 방식 이 적당 합 니 다. 기본 방식 은 JDK 동적 에이전트 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.