[SPRING] 스프링 프레임 워크가 XML 기반 구성으로 어노테이션 기반 구성을 재정의 할 수 있습니까?
SPRING스프링 프레임 워크가 XML 기반 구성으로 어노테이션 기반 구성을 재정의 할 수 있습니까?
스프링 프레임 워크가 XML 기반 구성으로 어노테이션 기반 구성을 재정의 할 수 있습니까? 주석을 통해 이미 정의 된 bean의 종속성을 변경해야하며 bean의 작성자가 아닙니다.
해결법
-
==============================
1.이게 괜찮을거야. 스프링 빈 컨텍스트는 "나중에"정의가 "이전 것들"을 오버라이드하여 빈을 재정의 할 수있게한다. 주석이 정의 된 bean은 XML 정의 bean과 혼합되어 있어도 XML 정의 bean에 적용되어야합니다.
이게 괜찮을거야. 스프링 빈 컨텍스트는 "나중에"정의가 "이전 것들"을 오버라이드하여 빈을 재정의 할 수있게한다. 주석이 정의 된 bean은 XML 정의 bean과 혼합되어 있어도 XML 정의 bean에 적용되어야합니다.
예를 들어,
@Configuration public class MyAnnotatedConfig { @Bean public Object beanA() { ... } }
<bean class="com.xyz.MyAnnotatedConfig"/> <bean id="beanA" class="com.xyz.BeanA"/>
이 경우 beanA의 XML 정의가 우선해야합니다.
-
==============================
2.나는 봄이 구성을 혼합 할 수 있다는 것을 몰랐다. 여기에 상세하고 매우 유용한 예제가 있습니다.
나는 봄이 구성을 혼합 할 수 있다는 것을 몰랐다. 여기에 상세하고 매우 유용한 예제가 있습니다.
Bean1은 우리가 구성하고있는 실제 빈입니다.
package spring; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; @Component public class Bean1 { private String naber; @Autowired @Qualifier("FireImpl1") private Fire fire; @PostConstruct public void init() { System.out.println("init"); getFire().fire(); } @PreDestroy public void destroy() { System.out.println("destroy"); } public void setNaber(String naber) { this.naber = naber; } public String getNaber() { return naber; } public void setFire(Fire fire) { this.fire = fire; } public Fire getFire() { return fire; } }
화재는 의존성 인터페이스입니다.
package spring; public interface Fire { public void fire(); }
및 더미 구현 1
package spring; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; @Component @Qualifier("FireImpl1") public class FireImpl1 implements Fire { public void fire() { System.out.println(getClass()); } }
및 더미 구현 2
package spring; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; @Component @Qualifier("FireImpl2") public class FireImpl2 implements Fire { public void fire() { System.out.println(getClass()); } }
config.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <context:component-scan base-package="spring" /> <bean id="bean1" class="spring.Bean1"> <property name="naber" value="nice" /> <property name="fire" ref="fireImpl2" /> </bean> </beans>
주류
package spring; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Spring { public static void main(String[] args) { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("/spring/config.xml"); applicationContext.registerShutdownHook(); Bean1 bean = (Bean1) applicationContext.getBean("bean1"); System.out.println(bean.getNaber()); } }
여기 출력은
init class spring.FireImpl2 nice destroy
주석은 FireImpl1에 대한 의존성을 해결하지만, xml 구성은 FireImpl2로 대체됩니다. 아주 좋아.
from https://stackoverflow.com/questions/4943475/can-spring-framework-override-annotation-based-configuration-with-xml-based-conf by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Hibernate 콜렉션은 어떤 세션과도 연관되지 않는다. (0) | 2019.02.06 |
---|---|
[SPRING] TLD "META-INF / c.tld"를 읽을 수 없습니다. (0) | 2019.02.06 |
[SPRING] HTTP 상태 405 - 요청 메소드 'POST'가 지원되지 않음 (스프링 MVC) (0) | 2019.02.06 |
[SPRING] RestTemplate PATCH 요청 (0) | 2019.02.06 |
[SPRING] @Autowire (required = false)와 같이 @Inject를 JSR 330에서 선택적으로 사용할 수 있습니까? (0) | 2019.02.06 |