第三章:SpringBoot配置深刻-3. Bean配置

在使用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;

這樣才能夠準確找到所須要的注入的實體對象。

相關文章
相關標籤/搜索