우리는 다른 jar를 의존성으로 사용하는 Spring 관리 애플리케이션을 가지고있다.이 애플리케이션은 속성 파일속성은 dependency jar (Spring 3/XML) 내에 채워지지 않는다.
에서 주입 된 값을 사용해야하는 Spring 관리 서비스 클래스를 포함한다.Spring 컨텍스트 설정
public static void main(String[] args) {
GenericXmlApplicationContext appContext = new GenericXmlApplicationContext("applicationContext.xml");
SomeClass someClass = (SomeClass) appContext.getBean("someClass");
someClass.someMethod();
...
public class SomeClass {
private ServiceFromTheOtherJar serviceFromTheOtherJar;
public SomeClass(ServiceFromTheOtherJar serviceFromTheOtherJar) {
this.serviceFromTheOtherJar = serviceFromTheOtherJar;
}
public void someMethod() {
serviceFromTheOtherJar.call();
...
APPLIC 종속 항아리에서 서비스를 호출하는 클래스의 주요 응용 프로그램 주요 응용 프로그램의 ationContext.xml
<bean name="serviceFromTheOtherJar" class="com...ServiceFromTheOtherJar"/>
<bean name="someClass" class="com...SomeClass">
<constructor-arg ref="serviceFromTheOtherJar"/>
</bean>
속성 값을 포함 종속 항아리
public class ServiceFromTheOtherJar {
private String someFieldWeWantToFillFromPropertyFile;
public void setSomeFieldWeWantToFillFromPropertyFile(String someFieldWeWantToFillFromPropertyFile) {
this.someFieldWeWantToFillFromPropertyFile = someFieldWeWantToFillFromPropertyFile;
}
public void call() {
//we would like to use the filled someFieldWeWantToFillFromPropertyFile here
...
물론 우리가 종속 항아리에 application.properties 파일이있는 서비스 클래스, 즉 우리 someFieldWeWantToFillFromPropertyFile에 주입하고 싶습니다.
이제 우리는 종속 항아리를 주 앱에 종속물로 추가 할 수 있습니다. 메인 애플리케이션이 실행될 때 Spring 컨텍스트가 올바르게 설정되고 ServiceFromTheOtherJar.call() 메서드가 예상대로 호출됩니다. 그러나 someFieldWeWantToFillFromPropertyFile는 우리가 지금까지 시도 어떤 속성 파일에서 작성되지 않습니다 (예를 들어 @PropertySource ({ "application.properties"}) 등 Environment.getProperty (...))
제한
우리는 두 항아리 모두에서 스프링 3 버전을 사용하고 있으며, 이는 전개 환경으로 인해 유지되어야한다. 그래서 Spring 4 솔루션은 문제가되지 않는다.
위에서 보았 듯이, 메인 애플리케이션은 현재 GenericXmlApplicationContext를 사용하며, 이는 애플리케이션의 중요한 재 작성을 나타내는 것으로 보인다. 따라서. 이 applicationContext.xml에 다음 콩을 추가 당신이 가지고있는 특성 파일의 값을 읽으려면 실행 및 환경 설정
작동합니다. 감사합니다. 하지만 건축/sw 원칙의 관점에서도 괜찮은지 궁금합니다. 여기서 main jar는 의존성 jar의 등록 정보 파일을 액세스하고 주입을 관리한다는 것을 의미합니다. Dependency Jar 내에서 처리되는 주석 솔루션을 찾았습니다. 자체 Configuration/ComponentScan 파일이 있고 Service 클래스는 값이있는 주입을 관리합니다. 불행히도 나는 작동하는 XML 솔루션을 찾을 수 없었다. 예 :main jar는 서비스 빈 + 프로퍼티 인젝션을 선언하는 의존성 jar 자신의 XML 컨텍스트를 가져올 수 있지만 실행 중에 인젝션은 발생하지 않습니다 .. – hammerfest
서비스 빈의 컨텍스트를 정의하고 프로퍼티를 읽기위한 다른 빈을 정의 할 수 있습니다 종속성 jar에있는 자체 XML 파일 (service-context.xml)에 저장하십시오. 메인 컨텍스트를 정의하는 파일은 다른 파일을' '과 함께 포함 할 수 있습니다. –
jaysee
예, 이전에 언급 한 내용은 시도했지만 작동하지 않는 이유가 있습니다. 그것은 컴파일되고 컨텍스트 빌드 업은 성공적이지만, 실행 중에 프로퍼티 값이 주입되지 않습니다 .. – hammerfest