装配Bean:XML与JavaConfig混合装配
2016-08-19 12:23
337 查看
IOC容器装载Beans有三种方式:
【显示】JavaConfig(当前流行)
【显示】XML(古老的|不可替代的)
【隐式】自动装配(注解扫描)
实际使用往往是交叉的
本节内容:
- 如何使用多个JavaConfig类进行配置
- 如何在JavaConfig中引入xml配置
- 如何在xml中引入JavaConfig配置
如何使用多个JavaConfig类进行配置
就像XML方式配置bean类似,如何将项目所有Bean都添加到同一个JavaConfig会显得十分臃肿。那么如何拆分呢?XML中可以使用<import>,所以在JavaConfig类中我们可以使用@import
代码如下
Beans相关代码
接口类MobilePhone
接口类Computer
接口实现类
JavaConfig
注意点:@import 我们最终的根Configuration类
测试类
混合装配方式:现在我们将MobilePhone的Beans配置在xml中,如何使用JavaConfig
xml配置
在JavaConfig类中使用@ImportResource指示加载xml的路径
如何在xml引入JavaConfig类呢?
再简单不过了,JavaConfig首先他就是Java类,我们只要配置一个Bean不就可以了吗!
【显示】JavaConfig(当前流行)
【显示】XML(古老的|不可替代的)
【隐式】自动装配(注解扫描)
实际使用往往是交叉的
本节内容:
- 如何使用多个JavaConfig类进行配置
- 如何在JavaConfig中引入xml配置
- 如何在xml中引入JavaConfig配置
如何使用多个JavaConfig类进行配置
就像XML方式配置bean类似,如何将项目所有Bean都添加到同一个JavaConfig会显得十分臃肿。那么如何拆分呢?XML中可以使用<import>,所以在JavaConfig类中我们可以使用@import
代码如下
Beans相关代码
接口类MobilePhone
package com.xbz.learn.spring.autowire; public interface MobilePhone { /** * 给XXX打电话 * @param phoneNumber */ public void callPerson(String phoneNumber); }
接口类Computer
package com.xbz.learn.spring.autowire; /** * 电脑抽象接口 * @author xbz * */ public interface Computer { /** * 上网冲浪 */ public void surfInternet(); }
接口实现类
package com.xbz.learn.spring.autowire; /** * MobilePhone接口的iphone实现类 * @author xbz * */ public class Iphone implements MobilePhone{ public void callPerson(String phoneNumber) { System.out.println("iphone 正在向【"+phoneNumber+"】打电话"); } }
package com.xbz.learn.spring.autowire; public class XiaoMiPhone implements MobilePhone { public void callPerson(String phoneNumber) { System.out.println("小米手机 正在向【"+phoneNumber+"】打电话"); } }
package com.xbz.learn.spring.autowire; public class MacComputer implements Computer{ public void surfInternet() { System.out.println("用Mac上网非常爽!!!"); } }
package com.xbz.learn.spring.autowire; public class LenovoComputer implements Computer{ public void surfInternet() { System.out.println("用联想电脑上网,好烫啊!!!"); } }
JavaConfig
package com.xbz.learn.spring.autowire.javaConfig; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.xbz.learn.spring.autowire.Computer; import com.xbz.learn.spring.autowire.LenovoComputer; import com.xbz.learn.spring.autowire.MacComputer; @Configuration public class ComputerConfig { @Bean public Computer mac(){ System.out.println("得到一个Mac电脑"); return new MacComputer(); } @Bean public Computer lenovo(){ System.out.println("得到一个联想电脑"); return new LenovoComputer(); } }
package com.xbz.learn.spring.autowire.javaConfig; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.xbz.learn.spring.autowire.Iphone; import com.xbz.learn.spring.autowire.MobilePhone; import com.xbz.learn.spring.autowire.XiaoMiPhone; @Configuration public class MobilePhoneConfig { @Bean public MobilePhone iphone(){ System.out.println("得到一个iphone手机"); return new Iphone(); } @Bean public MobilePhone xiaomi(){ System.out.println("得到一个小米手机"); return new XiaoMiPhone(); } }
注意点:@import 我们最终的根Configuration类
package com.xbz.learn.spring.autowire.javaConfig; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @Configuration @Import({ComputerConfig.class,MobilePhoneConfig.class}) public class SpringJavaConfig { }
测试类
package com.xbz.learn.spring.autowire.javaConfig; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.xbz.learn.spring.autowire.Computer; import com.xbz.learn.spring.autowire.MobilePhone; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes={SpringJavaConfig.class}) public class SpringJavaConfigTest { @Autowired private MobilePhone iphone; @Autowired private MobilePhone xiaomi; @Autowired private Computer lenovo; @Autowired private Computer mac; @Test public void testPhoneConfig(){ System.out.println("iphone:"+iphone); System.out.println("xiaomi:"+xiaomi); iphone.callPerson("iphone"); xiaomi.callPerson("xiaomi"); System.out.println("is same?"+(iphone==xiaomi)); } @Test public void testComputerConfig(){ lenovo.surfInternet(); mac.surfInternet(); } }
混合装配方式:现在我们将MobilePhone的Beans配置在xml中,如何使用JavaConfig
xml配置
<?xml version="1.0" encoding="UTF-8"?> <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:c="http://www.springframework.org/schema/c" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd "> <!-- MobilePhone相关实现类 --> <bean id="iphone" class="com.xbz.learn.spring.autowire.Iphone"></bean> <bean id="xiaomi" class="com.xbz.learn.spring.autowire.XiaoMiPhone"></bean> </beans>
在JavaConfig类中使用@ImportResource指示加载xml的路径
package com.xbz.learn.spring.autowire.javaConfig; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.ImportResource; @Configuration @Import({ComputerConfig.class}) @ImportResource(locations={"classpath:spring/spring-beans.xml"}) public class SpringJavaConfig { }
如何在xml引入JavaConfig类呢?
再简单不过了,JavaConfig首先他就是Java类,我们只要配置一个Bean不就可以了吗!
<!-- 引入JavaConfig --> <bean class="com.xbz.learn.spring.autowire.javaConfig.SpringJavaConfig"></bean>
相关文章推荐
- 第2章 装配Bean---xml和javaConfig混合使用装配---笔记5
- Spring装配bean的三种方法:自动化装配,java代码装配,XML装配及它们的混合使用
- spring对于bean的javaconfig,xml,自动装配三种装配方式实现
- 自动装配、JavaConfig、XML 三种方案之间,怎么导入和混合配置?
- Spring基础——在 Spring Config 文件中基于 XML 的 Bean 的自动装配
- Spring Bean之JavaConfig自动化装配bean
- Spring-5.注解实现Bean装配(java-xml-java)
- 装配Bean:JavaConfig@Bean@Configuration
- JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试
- spring实战-JavaConfig装配bean
- Spring基础篇——通过Java注解和XML配置装配bean
- 从零开始的spring 之 脱离web下的spring 上 (javaconfig装配bean)
- 6、使用javaConfig代替xml文件来声明和导入bean
- Spring实战——XML和JavaConfig的混合配置
- 【Spring in action】自动化装配Bean、通过Java代码及xml装配Bean
- Spring in action 02 -- 装配 Bean(JavaConfig)遇到的问题
- 【JavaWeb-23】spring、IoC控制反转和DI依赖注入入门、基于XML的Bean装配、基于注解的Bean装配
- 译--Spring中 bean定义profiles的使用 javaConfig 和XML配置
- Spring实战——XML和JavaConfig的混合配置
- Spring基础篇——通过Java注解和XML配置装配bean