7. 정리
- 어노테이션은 표식일 뿐이고,
@Retention(RUNTIME)이어야 실행 중에 읽힙니다. - 리플렉션은
Class객체에서 필드·메서드·어노테이션을 꺼내 읽고 호출하는 도구입니다. private 은setAccessible(true)로 엽니다. Method.invoke의 예외는InvocationTargetException으로 감싸이므로getCause()로 풀어 줍니다.- 동적 프록시는 인터페이스 호출을 핸들러 하나로 모읍니다. 앞뒤에 무엇을 넣는가가 AOP 입니다.
@Transactional은 프록시가 BEGIN/COMMIT/ROLLBACK 을 감싸는 것이고, 내부 호출은 프록시를 거치지 않습니다.- MyBatis 매퍼는 인터페이스의 SQL 어노테이션(또는 XML)을 읽어 바인딩·실행·매핑하는 프록시입니다.
- 리플렉션·프록시 비용은 DB 호출 앞에서 무시할 수준이지만, 내부 루프에서는
Method를 캐시합니다.