[SPRING] Spring을 이용한 런타임 의존성 주입
SPRINGSpring을 이용한 런타임 의존성 주입
나의 현재 프로젝트는 Spring을 이용하고 있으며 우리의 아키텍트는 Spring이 서비스, 저장소 및 공장 객체를 관리하도록하지만 도메인 객체는 관리하지 않기로 결정했다. 우리는 도메인 주도 디자인을 따르고 있습니다. 도메인 객체에 스프링을 사용하지 않는 이유는 주로 스프링이 정적 종속성 주입 만 허용한다는 것입니다. 정적 의존성 삽입이 의미하는 것은 의존성이 XML 구성 내에서 지정되고 "고정"된다는 것입니다.
나는 틀릴 수도 있지만 현재 나의 도메인은 객체와 통신하기 위해 인터페이스 만 활용하지만 스프링의 XML 설정은 구체적인 의존성을 지정하도록 강요한다. 따라서 배포시 모든 구체적인 종속성을 해결해야합니다. 때때로 이것은 실현 가능하지 않습니다. 대부분의 사용 사례는 런타임 데이터 또는 최종 사용자로부터받은 메시지를 기반으로 특정 유형을 주입하는 것을 기반으로합니다.
우리의 디자인의 대부분은 다음과 같은 명령 패턴입니다. 따라서 명령을 받으면 도메인 모델을 만들고 명령에서받은 데이터를 기반으로 특정 유형의 집합을 집계 루트 객체에 주입합니다. 따라서 런타임 데이터를 기반으로 도메인 모델을 작성하는 스프링의 기능 부족으로 인해 정적 팩토리 메소드, 빌더 및 팩토리 패턴을 사용해야합니다.
스프링이 위의 시나리오에 문제가 있다면 조언 해 줄 수 있습니까?
AOP를 사용하여 종속성을 주입 할 수는 있지만 스프링의 인프라를 활용하지 않습니다.
해결법
-
==============================
1.Spring과의 의존성 삽입을 위해 AspectJ 사용에 관한 Spring 문서의 섹션을 읽는 것이 좋다.
Spring과의 의존성 삽입을 위해 AspectJ 사용에 관한 Spring 문서의 섹션을 읽는 것이 좋다.
AOP가 Spring의 인프라의 핵심 부분이라고 생각할 때, "AOP를 사용하여 종속성을 주입 할 수 있지만, 나는 스프링의 인프라를 활용하지 않습니다"라고 말한 것이 흥미 롭습니다. 두 사람은 잘 어울립니다.
위의 링크를 사용하면 Spring의 AOP가 스프링 인프라를 직접 참조하지 않고 (예 : new 연산자를 사용하여) 생성중인 도메인 객체에 종속성을 투명하게 주입하도록 할 수 있습니다. 그것은 매우 똑똑하지만 약간의 클래스 수준의 클래스 로딩을 필요로합니다.
-
==============================
2.Spring의 의존성 삽입 / 구성은 데이터 소스, 트랜잭션 관리, 원격, 서블릿 마운트 포인트 등과 같은 저수준 기술 인프라를 구성하기위한 용도로만 사용됩니다.
Spring의 의존성 삽입 / 구성은 데이터 소스, 트랜잭션 관리, 원격, 서블릿 마운트 포인트 등과 같은 저수준 기술 인프라를 구성하기위한 용도로만 사용됩니다.
Spring을 사용하여 기술 API와 서비스 사이를 연결하고 일반적인 Java 코드 만 작성하면됩니다. Spring을 도메인 모델 및 서비스 구현으로부터 멀리하는 것이 좋은 일입니다. 처음에는 응용 프로그램의 비즈니스 논리를 하나의 프레임 워크에 묶거나 낮은 수준의 기술 문제를 응용 프로그램 도메인 모델에 "유출"시키지 않으려 고합니다. 자바 코드는 스프링의 XML 설정보다 IDE에서 수정하기가 훨씬 쉽기 때문에 비즈니스 로직을 자바로 유지하면 새로운 기능을보다 신속하게 제공하고 애플리케이션을보다 쉽게 유지 관리 할 수있다. 자바는 스프링의 XML 포맷보다 표현력이 뛰어나므로 평범한 자바를 고수하면 도메인 개념을보다 명확하게 모델링 할 수있다.
-
==============================
3.Spring의 의존성 주입 (Dependency Injection)은 기본적으로 Services, Repositories and Factories 등을 함께 연결하는 것이다. 커맨드 등에 대한 응답으로 동적으로 처리되어야하는 것들을 직접 다루지는 않는다. 사물. 대신, 당신이 그들을 사용하는 데 사용하려는 개체에 연결할 수 있도록함으로써 이러한 것들이 완료되는 방법을 제어 할 수 있습니다.
Spring의 의존성 주입 (Dependency Injection)은 기본적으로 Services, Repositories and Factories 등을 함께 연결하는 것이다. 커맨드 등에 대한 응답으로 동적으로 처리되어야하는 것들을 직접 다루지는 않는다. 사물. 대신, 당신이 그들을 사용하는 데 사용하려는 개체에 연결할 수 있도록함으로써 이러한 것들이 완료되는 방법을 제어 할 수 있습니다.
from https://stackoverflow.com/questions/1439839/runtime-dependency-injection-with-spring by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Servlet 3 @WebServlet과 async를 Spring MVC 3와 함께 사용하는 방법? (0) | 2019.02.03 |
---|---|
[SPRING] Spring을 통해 서버 모드에서 H2 데이터베이스 시작하기 (0) | 2019.02.03 |
[SPRING] eager fetches를위한 Spring JDBC RowMapper 사용법 (0) | 2019.02.03 |
[SPRING] Spring Controller에서 Web App 루트 얻기 (0) | 2019.02.03 |
[SPRING] 다른 인증 프로 바이더 (Web App 용 API 및 LDAP의 기본 인증)로 여러 WebSecurityConfigurerAdapter 사용 (0) | 2019.02.03 |