[Spring 3.1 @Enable] 1. @Configuration 상속을 사용한 확장 방법
저는 사실 오늘 토비님 발표를 두번봤습니다. 실제 발표 시간 때 한번봤고, 발표하기 전에 리허설 때 한번 먼저 봤습니다. 리허설을 보기 전에는 발표 자료를 또 먼저 봤었구요. 발표자료만 봤을 때는 꽤나 어렵게 느껴졌는데, 리허설 때 라이브 코딩을 보니까 이해하기가 더 수월했습니다. 그리고 실제 발표 시간에는 직접 토비님 코딩에 맞춰서 저도 똑같이 따라서 코딩했습니다.
어쩄든 보면서 코딩했던걸 되새기며, 까먹기 전에 후딱 기록합니다.
먼저, 별로 권장할만한 방법은 아니지만, 가장 단순한 방법은 @Configuration 클래스를 상속받는 방법입니다. 상속 받아서 오버라이딩을 하거나, 새로운 @Bean을 추가할 수 있겠습니다.
[gist id=1633111 file=Hello.java]
이런 클래스가 있고, 이걸 자바 설정으로 다음과 같은 빈 설정 파일을 만들었다고 가정하겠습니다.
[gist id=1633111 file=HelloConfig.java]
이 빈 설정에 등록한 Hello @Bean을 다른 빈 설정에서도 재사용 및 확장하고 싶다면, 다음과 같이 단순하게 상속해서 오버라이딩 할 수 있습니다.
[gist id=1633111 file=AppConfig.java]
하지만, 다음과 같은 문제가 있죠.
- 클래스 이름 외워야 한다.
- 자바는 단일 상속이기 때문에 다른 설정은 확장하지 못한다.
- 자바의 상속이 가진 모든 단점도 지니게 된다.
- @Configuration의 @Bean은 CGLib 프록시를 사용하기 때문에 @Bean 메서드에 final을 사용해서 중요 로직이 오버라이딩되지 않도록 방지할 수가 없어서, 자칫 오버라이딩으로 인해 중요 로직까지 바뀔 수 있다.
그래서 이 방법은 가장 단순한 방법이긴 하지만, 별로 권장할만한 방법은 아닙니다. 그렇다고 쓰지 말라는 법은 없으니깐 뭐.. 흠냐..