오랫동안 우리 모두가 사용했던 xml 파일과 같은 "중앙 집중식, 선언적 구성"을 갖는 가치가 있다고 믿었습니다. 그런 다음 파일의 대부분의 구성이 구성 되지 않았다는 것을 깨달았 습니다. 개발 후에도 변경되지 않았습니다. 그런 다음 "중앙 집중식"은 아주 작은 시스템에서만 가치가 있다는 것을 깨달았습니다. 작은 시스템에서만 구성 파일 을 전체적으로 파악할 수있을 것 입니다. 그리고 동일한 "배선"이 코드의 의존성에 의해 대부분 복제 될 때 실제로 배선 전체를 이해하는 가치는 무엇입니까? 따라서 내가 유지 한 유일한 것은 메타 데이터 (주석)이며, 이는 여전히 일종의 선언입니다. 이것들 은 런타임에 절대 변하지 않으며 결코 변하지 않습니다. 누군가가 즉시 변경하는 "구성"데이터-코드에 보관하는 것이 좋습니다.
가능한 한 완전 자동 배선을 사용합니다. 나는 그것을 좋아한다. 나는 총구를 위협하지 않는 한 구식 봄으로 돌아 가지 않을 것입니다. 완전히 선호하는 나의 이유는 @Autowired
시간이 지남에 따라 변했다.
지금은 자동 배선을 사용하는 가장 중요한 이유는 시스템에서 추적해야 할 추상화가 적기 때문이라고 생각합니다. "콩 이름"은 사실상 사라졌습니다. 빈 이름은 xml 때문에 존재한다는 것이 밝혀졌습니다. 따라서 추상 간접의 전체 레이어 (bean-name "foo"를 bean "bar"에 연결)가 사라졌습니다. 이제 "Foo"인터페이스를 빈에 직접 연결하고 런타임 프로파일로 구현을 선택합니다. 이를 통해 종속성 및 구현을 추적 할 때 코드 로 작업 할 수 있습니다 . 내 코드에서 자동 유선 종속성을 볼 때 IDE에서 "구현으로 이동"키를 누르면 알려진 구현 목록이 나타납니다. 대부분의 경우 구현이 하나만 있으며 클래스에 직접 접근합니다. 할 수있다' 어떤 구현이 사용되고 있는지 (XML 배선을 사용하면 그 반대가 진실에 더 가깝다고 주장합니다.
이제 매우 단순한 계층이라고 말할 수 있지만 시스템에 추가하는 각 추상화 계층은 복잡성을 증가시킵니다 . 나는 XML이 내가 작업 한 시스템에 실제 가치를 더했다고 생각하지 않는다.
지금까지 작업 한 대부분의 시스템 에는 프로덕션 런타임 환경 이 하나만 구성되어 있습니다. 테스트 등을위한 다른 구성이있을 수 있습니다.
풀 오토와 이어링은 스프링의 루비 온 레일 (Ruby-on-rails of Spring)이라고 말하고 싶습니다. 대부분의 사용 사례가 따르는 일반적이고 일반적인 사용 패턴이 있다는 개념을 수용합니다. XML 구성하면 허용 / 구성되지 않을 수 일치 / 불일치 구성 사용을 많이. 불일치로 인해 너무 많은 XML 구성이 사용되는 것을 보았습니다. 코드와 함께 리팩터링됩니까? 생각하지 않았다. 그 이유는 무엇입니까? 보통은 아닙니다.
우리는 구성에서 한정자를 거의 사용하지 않으며 이러한 상황을 해결하는 다른 방법을 찾았습니다. 이는 우리가 직면 한 명백한 "불이익"입니다. 자동 배선과의 원활한 상호 작용을 위해 코딩 방식을 약간 변경했습니다. 고객 리포지토리는 더 이상 일반 Repository<Customer>
인터페이스를 구현하지 않지만 CustomerRepository
확장 되는 인터페이스 를 만듭니다 Repository<Customer>
. 서브 클래 싱과 관련하여 간혹 트릭이있을 수도 있습니다. 그러나 일반적으로 더 강력한 타이핑 방향을 지시합니다. 거의 항상 더 나은 솔루션이라고 생각합니다.
그러나 그렇습니다. 대부분 봄이하는 특정 스타일의 DI와 관련이 있습니다. 우리는 심지어 우리는 여전히 우리의 시스템에서 일부 XML을 (우리가하고있는 캡슐화 / 정보 숨어 부서에서 일 주장 할 수 그래서),하지만 XML은 기본적으로 더 이상 종속성을 공개 세터를하지 않는 유일한 이상 현상을 포함한다. 완전 자동 배선은 XML과 잘 통합됩니다.
우리가 지금해야 할 유일한 것은입니다 @Component
, @Autowired
나머지는 (같은 JSR에 포함되는 JSR-250 우리가 스프링에 묶을 필요가 없습니다). 이것은 과거에 일어났던 방식 (물건이 java.util.concurrent
떠오를 것)이므로, 다시 이런 일 이 일어나더라도 전혀 놀라지 않을 것입니다.