개체를 동적으로 확장하기 위해 클래스 메서드 사이에 끼워 넣고 싶습니다.자바 클래스 메서드에 끼어 들기 (인터페이스 없음)
나는 java.lang.reflect.Proxy에 대해 이미 알고 있지만 실제 삽입하는 데 너무 제한되어 있습니다.
는 Using java.lang.reflect.Proxy to Interpose on Java Class Methods에서 첫번째 제한은 :
가(...) 방법이 프록시 클래스의 인스턴스를 통해 호출한다. 따라서 중첩 된 메소드 호출은 가로 챌 수 없습니다.
그리고 최악의 하나
(...) 방법은 프록시되고있는 object에 의해 구현되는 인터페이스에 정의되어 있어야합니다. 인터페이스를 구현하지 않는 클래스의 인스턴스를 통해 호출 할 수 없습니다.
런타임시 확장 할 개체는 인터페이스를 구현하지 않으며 최악의 경우 재정의해야하는 메서드가 중첩되어 있고 전용입니다.
나는이 파이썬 & C에서 상당히 쉽게 알고, 위에서 언급 한 기사는 가능할 수 있다고 말한다 :이 시리즈의다음 기사는 이러한 한계를 극복하기위한 몇 가지 기술을 설명 할 것이다.
불행히도이 기사를 찾을 수 없습니다. CGLIB를 사용
그 기사는 2001 년입니다. * 11 살 *. 실험을 토대로 선사 시대적인 것을 찾아 내려고 시도 할 수도 있습니다. – skaffman
이런 종류의 변경은 대개 매우 나쁜 프로그래밍 습관으로 간주됩니다. 유지 보수가 불가능하고 지원이 불가능한 코드로 이어질 수 있습니다. 당신이 제안하는 것은 일반적으로 더 좋은 방법을 가지고 있습니다. 나는 당신이 염두에두고있는 문제에 대한 특별한 해결책을 가지고 있다고 의심한다. 동일한 문제에 대한 다른 해결책을 고려해 주시겠습니까? –
때때로 해킹 만 수행하는 유일한 방법입니다. (긴) 이야기에 관심이 있다면, PM =) –