在使用spring进行开发配置的时候有两类选中:*.xml配置文件,配置的bean(@Configure),因而在springboot的开发世界里面,为了继续崇尚所谓的"零配置",提供有一种简单的支持,也就是说若是如今你真的有配置须要经过*.xml文件编写,可是又不想出现配置文件的话,这个时候最简单的作法就是使用bean的方式来进行类的配置。java
前提:该配置程序的bean所在的包必须是程序启动类所在包的子包之中,这样才能够自动扫描到。web
1.下面准备一个程序,创建一个业务接口,然后定义这个接口的子类:spring
package cn.mldn.microboot.service; public interface IMessageService { public String info(); }
2.创建控制层类,进行对象的配置注入springboot
package cn.mldn.microboot.controller; import javax.annotation.Resource; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import cn.mldn.microboot.service.IMessageService; import cn.mldn.microboot.util.controller.AbstractBaseController; @RestController public class MessageController extends AbstractBaseController{ @Resource private IMessageService messageService; @RequestMapping(value="/",method=RequestMethod.GET) public String index(){ return this.messageService.info(); } }
3.创建一个测试类app
package cn.mldn.microboot.test; import javax.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import cn.mldn.microboot.StartSpringBootMain; import cn.mldn.microboot.controller.MessageController; @SpringBootTest(classes = StartSpringBootMain.class) @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration public class TestMessageController { @Resource private MessageController messageController; @Test public void testIndex() { System.out.println(this.messageController.index()); } }
================================框架
下面就利用以上的程序来了解一下什么叫作bean配置,为了清除的发现bean配置的特色删除业务层实现子类宗的"@Service"注解,也就是说这个对象如今没法被注入,因而下面在启动类所在包的子包里面创建一个配置程序类:cn.mldn.microboot.config.ServiceConfig。ssh
package cn.mldn.microboot.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import cn.mldn.microboot.service.IMessageService; import cn.mldn.microboot.service.impl.IMessageServiceImpl; @Configuration //此处为配置项 public class ServiceConfig { @Bean //此处返回的是一个spring的配置bean,与xml的"<bean>"等价 public IMessageService getMessageService(){ //方法名称随便写 return new IMessageServiceImpl(); } }
此时采用了自动扫描bean的模式来进行了相关对象的配置。测试
==================this
ssm或ssh开发框架出现的时间比较长,如今迁移到springboot之中,那么若是说如今你已经有一个很是完善的xml配置文件出现了,难道还须要将整个的xml配置文件转换为bean配置吗?为了防止这类状况出现,springboot也支持有配置文件的读取,例如:下面建立一个spring-common.xml配置文件:spa
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="messageService" class="cn.mldn.microboot.service.impl.IMessageServiceImpl" /> </beans>
package cn.mldn.microboot.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import cn.mldn.microboot.service.IMessageService; import cn.mldn.microboot.service.impl.IMessageServiceImpl; @Configuration //此处为配置项 public class ServiceConfig { @Bean(name="configService") //此处返回的是一个spring的配置bean,与xml的"<bean>"等价 public IMessageService getMessageService(){ //方法名称随便写 return new IMessageServiceImpl(); } }
=====
随后能够在程序启动类上使用xml进行配置加载:
package cn.mldn.microboot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ImportResource; @SpringBootApplication // 启动SpringBoot程序,然后自带子包扫描 @ImportResource(locations={"classpath:spring-common.xml"}) public class StartSpringBootMain { public static void main(String[] args) throws Exception { SpringApplication.run(StartSpringBootMain.class, args); } }
若是此时所配置的两个bean都没有名字那么在进行注入的时候必定会出现重复的错误,而这个错误在新版本里面将其作了完善,不过若是要想在开发之中准确的注入指定的对象,则须要使用名字完成;
@Resource(name="messageService") private IMessageService messageService;
这样才能够准确找到所须要的注入的实体对象。