2012-05-23 8 views
2

CDI spec의 5.4.1 절에는 으로 선언 된 경우 유효하지 않은 Bean은 프로 프로파일 할 수 없으므로 주입 할 수 없다고 명시되어 있습니다. 스펙에는 이유가 없으며이 결정에 대한 이유를 생각할 수 없습니다.왜 최종 클래스가 CDI에서 프로비저닝 할 수 없습니까?

나는 상속을 위해 명시 적으로 설계되지 않은 클래스가이를 금지해야한다고 말하는 디자인 규칙을 고수하려고합니다. 그래서 CDI 스펙은 나쁜 디자인을 강요하는 것처럼 보입니다 (그리고 CheckStyle은 울부 짖습니다).

왜 그렇고 그렇게 할 수 있습니까?

감사합니다.

답변

4

클래스에 대한 프록시를 만들 때 (가능한 경우 인터페이스를 구현하므로) 클래스가 최종 클래스이면 상속받을 수 없으므로 프록시를 만들 수 없습니다.

CDI를 사용하려면 에 비 최종 클래스가 있어야합니다. 다른 옵션은 CDI를 모두 사용하지 않습니다.

+0

확실한 답변을 주셔서 감사합니다. Mauricio. 나는 마지 못해 그 checkstyle 모듈을 사용 불가능하게하는 것으로 끝났다. CDI를 포기하는 것은 실제 옵션이 아닙니다. IMO는 기능에 대한 깨끗한 디자인을 불편하게 느낍니다. – kostja

+0

자바의 일부분에 대해서만 감사 할 수 있습니다. – LightGuard

1

마지막 클래스에서 메소드 차단 기술을 사용하는 유일한 방법은 클래스 자체를 변경하는 것입니다. 이것은 클래스 파일이 디스크에서 변경되는 "향상"이라고 알려진 프로세스를 통해 수행되었습니다. 오늘은 로딩 시간 짜기을 사용할 수 있습니다. 이것은로드하는 동안 클래스를 변경하는 기술입니다. AspectJ는이 기법을 사용한다.

+0

Marko에게 감사드립니다. 적어도 CDI의 다음 버전이 그것을 해결할 가능성은 다소 희박하지만 그래도 할 수 있습니다. – kostja