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

在使用spring进行开发配置的时候有两类选中:*.xml配置文件,配置的bean(@Configure),于是在springboot的开发世界里面,为了继续崇尚所谓的"零配置",提供有一种简单的支持,也就是说如果现在你真的有配置需要通过*.xml文件编写,但是又不想出现配置文件的话,这个时候最简单的做法就是使用bean的方式来进行类的配置。

前提:该配置程序的bean所在的包必须是程序启动类所在包的子包之中,这样才可以自动扫描到。

1.下面准备一个程序,建立一个业务接口,而后定义这个接口的子类:

package cn.mldn.microboot.service;

public interface IMessageService {
	public String info();
}

295a35e99c6accd3eb08c30f0b0aa3a968a.jpg

2.建立控制层类,进行对象的配置注入

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.建立一个测试类

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。

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的模式来进行了相关对象的配置。

==================

ssm或ssh开发框架出现的时间比较长,现在迁移到springboot之中,那么如果说现在你已经有一个非常完善的xml配置文件出现了,难道还需要将整个的xml配置文件转换为bean配置吗?为了防止这类情况出现,springboot也支持有配置文件的读取,例如:下面创建一个spring-common.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"
	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;

这样才可以准确找到所需要的注入的实体对象。

 

转载于:https://my.oschina.net/u/3023191/blog/3033702

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值