Guice에서 Spring DI로 내 애완 동물 프로젝트를 옮겼다. 나는 약간의 노트를 공유하고 조언을 구합니다. guice config는 주석 (유일한 방법)으로 완료되었으며, Spring 설정은 @Configuration으로 주석 처리 된 하나의 AppConfig 클래스와 @Bean 내부에 주석 처리 된 많은 빈 생성 메소드도 포함합니다.Guice에서 Spring으로 이동 : 기본 생성자 및 속성 처리를 사용하는 bean
관찰과 질문 :
봄의 구성이 기본적으로 인자없는 생성자를 콩을 만들 수없는 방법이 가득 : 확실히 나쁜
@Bean public DataProvider getDataProvider() { return new DataProvider(); }
이잖아. Guice는 추가 구성없이 기본 생성자로 콩을 인스턴스화합니다. 봄에 에서이 작업을 수행 할 수 있습니까? 나는 만약 내가 @Component annotation을 클래스 패스와 함께 추가하면 트릭을 할 것이라는 것을 안다. 그러나 : 1. @Component로 주입하는 은 @Bean 2로 주입하는 것과 다릅니다. @Autowired를 추가하는 것보다 더 많은 파일로 구성을 분산시켜야합니다. 그 나쁜. 하나의 장소에 모든 설정을 유지하는 유일한 해결책은 오래된 XML 구성이지만 다시 모든 bean을 명시 적으로 선언하는 것입니다. 또는 나는 틀렸고 봄에 더 잘할 수 있습니까?
- 속성 파일 처리. Guice와 함께 작업하면서 나는 나쁜 것을 한 것입니다. 속성 값을 주입 한 수많은 개인 필드를 따라 @Named 주석을 분산 시켰습니다. 때로는 어떤 클래스에 5 가지 속성을 주입 할 수 있으며, 이로 인해 5 가지 주석이 생겼습니다. 그건 좋은 해결책이 아니 었습니다. 저는 Spring에서 더 잘하려했지만, 제가 발견 한 유일한 것은 설정 파일을 어디에서나 인스턴스화하고 주입하는 것입니다. 그냥이 완벽를 살펴 : 내 애완 동물 프로젝트가 다시 리팩토링 할 필요가 같은
@Bean public MyProjectStorageConfiguration getStorageConfiguration( @Value("${mongo.collections.names})") String mongoNames, @Value("${mongo.collections.data})") String mongoData, @Value("${files.maindata})") String mainData, @Value("${files.secondarydata})") String secondaryData, @Value("${files.backupdata})") String backupData, @Value("${files.additionaldata})") String additionalData) { return new MyProjectStorageConfiguration(mongoNames,mongoData, mainData,secondaryData,backupData,additionalData); }
보인다. 어떤 제안?
포인트 1은 확실하지 않지만 포인트 2는 작성 후 빈을 가져 오는 빈 포스트 프로세서를 작성하여 수행 할 수 있습니다. 그런 다음 자신의 bean을 검사하고 문자열이나 정수와 같은 속성 유형을 자동 삽입 할 수 있습니다. 물론 주사 가능한 속성의 이름 지정 규칙이나 속성으로 표시하는 또 다른 주석을 제안해야합니다. 그런 다음 규칙에 따라 필드 이름을 속성 이름과 일치시킬 수 있으며 bean에 대한 주석 없이도 필드 이름을 확인할 수 있습니다. 개인적으로 나는 이것을 명백하게하는 것이 좋다고 느낍니다. 너무 많은 마법을 죽이다;) – pandaadb