[Spring 7-2] AOP 기술 및 용어 설명-1

임승현·2023년 2월 16일

Spring

목록 보기
19/46

※ AOP를 사용하기 위해서는 인터페이스가 있어야함

🌈인터페이스 생성

📃Aop.java

※ xyz.itwill06.oop 패키지에 Aop.java 인터페이스 생성

package xyz.itwill06.oop;
//
public interface Aop {
	void display1();
	void display2();
	void display3();
}

🌈클래스 생성(핵심관심모듈)

📢핵심관심모듈 : 핵심관심코드만 이용하여 메소드를 작성한 클래스

📃AopOne.java

※ xyz.itwill06.oop 패키지에 AopOne.java 클래스 생성

package xyz.itwill06.oop;
//
//핵심관심모듈 : 핵심관심코드만 이용하여 메소드를 작성한 클래스
public class AopOne implements Aop {
	//
	@Override
	public void display1() {
		System.out.println("### AopOne 클래스의 display1() 메소드 호출 ###");
	}
	@Override
	public void display2() {
		System.out.println("### AopOne 클래스의 display2() 메소드 호출 ###");
	}
	@Override
	public void display3() {
		System.out.println("### AopOne 클래스의 display2() 메소드 호출 ###");	
	}
}

🌈클래스 생성(핵심관심모듈)

📃AopTwo.java

※ xyz.itwill06.oop 패키지에 AopTwo.java 클래스 생성

package xyz.itwill06.oop;
//
public class AopTwo implements Aop {
	//
	@Override
	public void display1() {
		System.out.println("### AopTwo 클래스의 display1() 메소드 호출 ###");
	}
	@Override
	public void display2() {
		System.out.println("### AopTwo 클래스의 display2() 메소드 호출 ###");
	}
	@Override
	public void display3() {
		System.out.println("### AopTwo 클래스의 display2() 메소드 호출 ###");	
	}
}

🌈프로그램 생성

📃AopApp.java

※ xyz.itwill06.oop 패키지에 AopTwo.java 클래스 생성

package xyz.itwill06.oop;
//
public class AopApp {
	public static void main(String[] args) {
		AopProxy one=new AopProxy(new AopOne());
		AopProxy two=new AopProxy(new AopTwo());
		//
		one.display1();
		one.display2();
		one.display3();
		//
		two.display1();
		two.display2();
		two.display3();
	}
}

🌈클래스 생성(횡단관심모듈)

📢횡단관심모듈 : 횡단관심코드만 이용하여 메소드를 작성한 클래스 - Advice 코드

📃AopLogger.java

※ xyz.itwill06.oop 패키지에 AopLogger.java 클래스 생성

package xyz.itwill06.oop;
//
//횡단관심모듈 : 횡단관심코드만 이용하여 메소드를 작성한 클래스 - Advice 코드
public class AopLogger {
	public void beforeLog() {
		System.out.println("*** 메소드의 명령(핵심관심코드)이 실행되기 전에 기록될 내용");	
	}
}

🌈클래스 생성(Proxy 클래스)

📢Proxy 클래스 : 핵심관심모듈의 메소드에 횡단관심모듈의 메소드를 삽입하여 동작하는 기능을 제공하는 클래스 - Aspect

※ Java Spring에서는 Proxy 클래스를 AspectJ로 자동으로 만들어줌 [Spring 7-3] 참고

📃AopProxy.java

※ xyz.itwill06.oop 패키지에 AopProxy.java 클래스 생성

package xyz.itwill06.oop;
//
//Proxy 클래스 : 핵심관심모듈의 메소드에 횡단관심모듈의 메소드를 삽입하여 동작하는 기능을 제공하는 클래스 - Aspect
public class AopProxy implements Aop {
	//핵심관심모듈로 선언된 클래스의 객체를 저장하기 위한 필드 생성
	//→ 필드의 자료형을 인터페이스로 선언하여 모든 자식 클래스의 객체 저장
	private Aop target;//인터페이스를 상속(AopOne,AopTwo는 자식클래스)
	//
	//횡단관심모듈로 선언된 클래스의 객체를 저장하기 위한 필드 생성
	private AopLogger logger;
	//
	//필드에 객체를 생성하여 저장하거나 매개변수로 객체를 전달받아 저장 - 의존성 주입(DI)
	//생성자 생성(target만)
	public AopProxy(Aop target) {
		super();
		this.target = target;
		logger=new AopLogger();//logger은 만들어서 저장
	}
	//인터페이스에 추상메소드(PointCut)를 오버라이드 선언하여 핵심관심코드와 횡단관심코드를 결합하여 실행되도록 작성 - Weaving
	//→ 핵심관심모듈의 메소드 호출 전 또는 후에 횡단관심모듈의 메소를 호출하여 실행되도록 설정 - JoinPoint
	@Override
	public void display1() {
		logger.beforeLog();
		target.display1();
	}
	@Override
	public void display2() {
		logger.beforeLog();
		target.display2();
	}
	@Override
	public void display3() {
		logger.beforeLog();
		target.display3();
	}
}

0개의 댓글