[SPRING] 봄 한정자 및 속성 자리 표시 자
SPRING봄 한정자 및 속성 자리 표시 자
한정자에서 표현식으로 속성 자리 표시자를 사용할 수 있어야하는지 아는 사람 있습니까? 나는이 일을 할 수없는 것 같습니다.
나는 봄 3.0.4를 사용하고있다.
@Controller
public class MyController {
@Autowired
@Qualifier("${service.class}")
Service service;
}
@Service
@Qualifier("ServiceA")
ServiceA implements Service {
public void print() {
System.out.println("printing ServiceA.print()");
}
}
@Service
@Qualifier("ServiceB")
ServiceB implements Service {
public void print() {
System.out.println("printing ServiceB.print()");
}
}
XML :
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="file:/etc/config.properties"/>
</bean>
config.properties:
config.properties
service.class=serviceB
해결법
-
==============================
1.이 작동합니다. 기본 스프링 빈 이름을 사용한다면 서비스 이름을 생략 할 수 있습니다. serviceA 대 ServiceA 등
이 작동합니다. 기본 스프링 빈 이름을 사용한다면 서비스 이름을 생략 할 수 있습니다. serviceA 대 ServiceA 등
@Controller class MyController { @Autowired(required=false) @Qualifier("Service") Service service; public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("app-ctx.xml", MyController.class); for(String s:context.getBeanDefinitionNames()){ System.out.println(s); for(String t:context.getAliases(s)){ System.out.println("\t" + t); } } context.getBean(MyController.class).service.print(); } } public interface Service { void print(); } @Service(value="ServiceA") public class ServiceA implements example.Service { public void print() { System.out.println("printing ServiceA.print()"); } } @Service(value="ServiceB") public class ServiceB implements example.Service { public void print() { System.out.println("printing ServiceB.print()"); } }
XML :
<beans> <alias name="${service.class}" alias="Service"/> <context:property-placeholder location="example/app.properties"/> <context:component-scan base-package="example"/> <beans>
소품:
service.class=ServiceB
-
==============================
2.나는 그 대답이 '아니오'라고 추측하려고 노력할 것인데, 단지 몇 가지 javadoc 페이지에 글을 올리는 것에 기반하고있다. 예를 들어 @Value에 대한 문서를 참조하십시오.
나는 그 대답이 '아니오'라고 추측하려고 노력할 것인데, 단지 몇 가지 javadoc 페이지에 글을 올리는 것에 기반하고있다. 예를 들어 @Value에 대한 문서를 참조하십시오.
http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/beans/factory/annotation/Value.html
그들은 주석에서 표현식을 사용하는 것에 대해 특별한 언급을합니다. 비교를 위해 @Qualifier에 대한 문서 :
http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/beans/factory/annotation/Qualifier.html
어떤 표현을 언급하지 않습니다. 명백히 확실한 대답은 아닙니다 (그러나 스프링은 일반적으로 문서화에 매우 유용합니다). 또한 @Qualifier 주석에서 표현식이 지원된다면 @Value 주석과 동일한 방식으로 작동 할 것으로 기대할 수 있습니다 (스프링이 매우 일관된 프레임 워크에 기반 함).
Spring 3.1은 당신이하려고하는 것과 같은 것을 성취 할 수있는 것처럼 보이는 새로운 프로파일 빈 기능을 가지고있다. 여기 그것에 대한 글이 있습니다.
http://blog.springsource.com/2011/02/14/spring-3-1-m1-introducing-profile/
-
==============================
3.이 솔루션은 XML 및 속성 파일없이 작동합니다.
이 솔루션은 XML 및 속성 파일없이 작동합니다.
너의 수업 개선 :
MyController.java:
@Controller public class MyController { @Autowired public MyController(@Qualifier("MyServiceAlias") MyService myService) { myService.print(); } }
ServiceA.java:
@Service("serviceA") public class ServiceA implements MyService { @Override public void print() { System.out.println("printing ServiceA.print()"); } }
ServiceB.java:
@Service("serviceB") public class ServiceB implements MyService { @Override public void print() { System.out.println("printing ServiceB.print()"); } }
application.properties (여기서로드 할 클래스를 변경할 수 있습니다) :
service.class=serviceA
중요한 구성 파일 AppConfig.java :
@Configuration public class AppConfig { @Autowired private ApplicationContext context; @Bean public MyService MyServiceAlias(@Value("${service.class}") String qualifier) { return (MyService) context.getBean(qualifier); } }
추가 설명 :
-
==============================
4.어쩌면 이것에 소용돌이 치는 소리를 내십시오.
어쩌면 이것에 소용돌이 치는 소리를 내십시오.
@Controller public class MyController { private String serviceId; @Value("${serviceId}") public void setServiceId(String serviceId) { this.serviceId = serviceId; } @Autowired @Qualifier(serviceId) Service service; }
from https://stackoverflow.com/questions/7812745/spring-qualifier-and-property-placeholder by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 바람둥이가없는 스프링 부트 전쟁 (0) | 2018.12.10 |
---|---|
[SPRING] Spring 트랜잭션과 hibernate.current_session_context_class (0) | 2018.12.10 |
[SPRING] 예외 발생 : 'springSecurityFilterChain'이라는 bean을 정의하지 않았습니다. (0) | 2018.12.10 |
[SPRING] JSR-303 @Valid 주석 (중첩 된 객체)이 작동하지 않음 (0) | 2018.12.10 |
[SPRING] Spring logging DEBUG 메시지를 비활성화하는 방법은 무엇입니까? (0) | 2018.12.10 |