Spring裝配Bean(四)
在JavaConfig中引用XML配置
存在使用JavaConfig配置的bean類
@Configuration
public class CDPlayerConfig {
@Bean
public CompactDisc sgtPeppers(){
return new SgtPeppers();
}
@Bean
public CDPlayer cdplayer(CompactDisc cd){
return new CDPlayer(cd);
}
}
如果兩個bean在一個配置類中多了,將其中一個CompactDisc的Bean建立使用另一個配置類
-- CompactDisc Bean
@Configuration
public class CDConfig {
@Bean
public CompactDisc sgtPeppers(){
return new SgtPeppers();
}
}
在原來的配置類中引入,上面這個配置類
-- CDPlayer Bean
@Configuration
@Import(value={CDConfig.class})
public class CDPlayerConfig {
@Bean
public CDPlayer cdplayer(CompactDisc cd){
return new CDPlayer(cd);
}
}
或者,將兩個bean類都分離開來,最後在一個更高階的配置類中引入
@Configuration
@Import(value={CDConfig.class,CDPlayerConfig.class})
public class SoundSystemConfig {
}
假設,我們需要將CompactDisc的bean的建立配置到xml中,如下:
<bean id="compactDisc" class="com.erong.service.SgtPeppers">
<property name="title" value="Sgt.Pepper's Hearts Club Band "></property>
<property name="artist" value="The Beatles"></property>
<property name="list">
<list>
<value>1</value>
<value>1</value>
<value>1</value>
<value>1</value>
</list>
</property>
</bean>
,那麼在SoundSystemConfig中配置為
@Configuration
@Import(value={CDPlayerConfig.class})
@ImportResource(locations = "classpath:beans.xml")
public class SoundSystemConfig {
}
,兩個Bean,定義在JavaConfig和Xml中的Bean最後都會載入到Spring容器中,最後整合Junit測試下:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={SoundSystemConfig.class})
public class Mytest {
@Autowired
private CDPlayer cdplayer;
@Test
public void run(){
cdplayer.play();
}
public static void main(String[] args) {
/*ClassPathXmlApplicationContext xf = new ClassPathXmlApplicationContext("beans.xml");
CDPlayer te = (CDPlayer)xf.getBean("cdplayer");
te.play();*/
}
}
在XML配置中引用JavaConfig
在JavaConfig配置中,我們已經展現瞭如何使用@Import和@ImportResource來拆分JavaConfig類,
在XML中,可以使用import元素來拆分XML配置
1. 首先明確,CDConfig配置類,定義了CompactDiscBean
2. 在xml中定義CDPlayer的Bean,並引用CompactDisc的Bean如下
<!-- 引入JavaConfig中配置類 -->
<bean class="com.erong.service.CDConfig"></bean>
<!-- 建立bean,並引用JavaConfig中的Bean -->
<bean id="cdplayer" class="com.erong.service.CDPlayer">
<property name="cd" ref="sgtPeppers"></property>
</bean>
這樣的結果就是,bean元素引入的是JavaConfig的Bean,XML中定義另一個Bean
當然,可以將XML中定義的Bean寫在另一個xml並引入,在root的xml中一般會再載入掃描包和註解元素
<!-- spring基於註解的配置 -->
<context:annotation-config/>
<!-- 加上元件掃描的配置 -->
<context:component-scan base-package="com"></context:component-scan>
<!-- 引入JavaConfig中配置類 -->
<bean class="com.erong.service.CDConfig"></bean>
<!-- 引入xml定義bean的xml檔案 -->
<import resource="bean-config.xml"/>
,最後,也整合Junit進行測試@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:beans.xml")
public class Mytest {
@Autowired
private CDPlayer cdplayer;
@Test
public void run(){
cdplayer.play();
}
public static void main(String[] args) {
/*ClassPathXmlApplicationContext xf = new ClassPathXmlApplicationContext("beans.xml");
CDPlayer te = (CDPlayer)xf.getBean("cdplayer");
te.play();*/
}
}
最後,總結下Spring裝載Bean的三種方式,Spring的核心是Spring容器
1. 自動裝配,@Component和掃描包的元素完成Bean的建立,@AutoWire,@Inject完成注入
2. JavaConfig ,@Configuration完成配置類,配置類裡面@Bean來定義Bean
3. XML裡面Bean的建立,直接使用Bean元素引入
相關文章
- Spring bean 裝配SpringBean
- Spring裝配Bean(一)SpringBean
- Spring裝配Bean(二)SpringBean
- 二、Spring裝配BeanSpringBean
- Spring裝配Bean(六)Bean的作用域SpringBean
- Spring IOC 一——Spring容器裝配BeanSpringBean
- 初識Spring —— Bean的裝配(一)SpringBean
- 初識Spring —— Bean的裝配(二)SpringBean
- Spring裝配Bean(七) Spring的執行時注入SpringBean
- Spring-04 Bean的自動裝配SpringBean
- Spring入門(二):自動化裝配beanSpringBean
- Spring入門(三):通過JavaConfig裝配beanSpringJavaBean
- bean 的自動裝配Bean
- SpringBoot(14)—註解裝配BeanSpring BootBean
- spring裝配Spring
- Spring 框架基礎(02):Bean的生命週期,作用域,裝配總結Spring框架Bean
- Bean的自動裝配及作用域Bean
- Spring原始碼:Bean生命週期(四)Spring原始碼Bean
- Spring中bean的四種注入方式SpringBean
- Spring裝配Bean(五)profile註解和解決自動注入的歧義性SpringBean
- Spring原始碼之Bean的載入(四)Spring原始碼Bean
- Spring自動裝配BeansSpringBean
- Spring Bean的3種裝配方式SpringBean
- [Spring]BeanSpringBean
- Spring Boot 自動裝配原理Spring Boot
- Spring Framework 條件裝配 之 @ConditionalSpringFramework
- 2、spring注入及自動裝配Spring
- Spring6 當中 獲取 Bean 的四種方式SpringBean
- Spring系列第四講 xml中bean定義詳解SpringXMLBean
- Spring Bean容器SpringBean
- 【Spring】Bean管理SpringBean
- SpringBoot自動裝配原理之Configuration以及@Bean註解的使用Spring BootBean
- Spring Bean 綜述SpringBean
- Spring Bean作用域SpringBean
- spring boot factory beanSpring BootBean
- 淺談Spring BeanSpringBean
- Spring基礎(Bean)SpringBean
- Spring Bean 詳解SpringBean