얜 springboot 아님
🤷♂️❓
AOP
관점 지향 프로그래밍
속도, 프로세서 관리 변경사항 위해 사용 多
가상공간으로 본코드를 복제해 가져와 수정한뒤 문제 없으면 본코드 버리고 새로 적용? 한다
본코드가 작동되고있는 상황에서 테스팅, 추가코드도 추가로 실행되어야함
ex ) 금융기관 점검시간
- ---- 본코드 ----
interface를 활용하는 형태 - 실행할 class에서 해당 inteface를 로드
- 코드 작성
- 실행
-----코드 추가 또는 변경되는 사항이 있을 경우 : AOP---- - proxy를 생성
- proxy에 추가 코드 작성(본코드와 동일한 변수,조건을 사용하면 X)
- 테스트 후 문제가 되지 않을 경우 본코드를 실행하지 않고 AOP(proxy)로 실행
👀 AOP-java
- examinterface.java (interface)
package ja.aop;
public interface examinterface {
public int total();
public float avg();
}
- example.java - 걍 class
package ja.aop;
public class example implements examinterface{
private int js,html,spring;
public example(int a, int b, int c) { //즉시 실행
this.js = a;
this.html = b;
this.spring=c;
}
@Override
public int total() { //합계
//start,end : 소요시간 check
long start = System.currentTimeMillis();
int result = this.js + this.html + this.spring;
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return result;
}
@Override
public float avg() { //평균값
float avgs = this.total()/3.0f;
return avgs;
}
}
- java_aop.java - void main(String[] args)
package ja.aop;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class java_aop {
public static void main(String[] args) {
//interface를 로드 후 해당 interface를 implements 한 즉시실행 메소드를 호출
examinterface ex = new example(100, 80, 90);
//AOP영역 (Proxy : AOP의 P)
examinterface aops = (examinterface)Proxy.newProxyInstance(
examinterface.class.getClassLoader(), //모든 class를 다 가져와
new Class[] {examinterface.class},
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
/* 본코드 복붙 후 중복 제거 */
long start2 = System.currentTimeMillis();
Object result = method.invoke(ex, args); //본코드의 값을 가져와서 실행
//본코드에는 없고 AOP에서만 실행되는 영역
long end = System.currentTimeMillis();
String msg = (end-start2)+"처리시간 소요됨-AOP";
System.out.println(msg);
String userid="hong";
return result;
}
});
//본코드 값 출력 - 여기를 주석처리해버리면 aop만 실행되는..것!
int result = ex.total();
System.out.println("본코드에서 실행된 결과값 :"+result);
//AOP 값 출력
int result_aop = aops.total();
float result_avg = aops.avg();
System.out.println("aop에서 실행된 결과값 :"+result_aop);
System.out.println("aop에서 실행된 결과 평균값 :"+result_avg);
}
}
Proxy : AOP의 P
Proxy.newProxyInstance (
동적 프록시 ClassLoad(프록시 클래스를 만들 클래스 로더),
Class : 프록시 클래스가 구현할 인터페이스 목록,
InvocationHandler : 메소드가 호출되었을때 실행될 추가 코드
)
Throwable
class, AOP의 예외처리 / exception의 상위 class임
Throwable > Exception > RuntimeException > IOException ...
'CLASS > SPRINGBOOT' 카테고리의 다른 글
#2-3 / AOP+springboot+로그기록(aop에서 dao 값 가져오기) (0) | 2024.08.13 |
---|---|
#2-2 / AOP-springboot (0) | 2024.08.13 |
#1-3 / springboot 기본형태 + coupon insert,delete 및 boot정리.. (0) | 2024.08.12 |
#1-2 / springboot 기본형태+ coupon list (0) | 2024.08.12 |
#1-1 / springboot setting (0) | 2024.08.09 |