1、简述

在springboot之前,我们常用的Spring Mvc项目中,我们通常会在spring.xml的配置文件中配置<beans>等相关的配置,这样当我们启动项目的时候,spring的运行机制会将配置的<beans>中的<bean>放到我们的spring容器中,我们可以通过@Autowired来直接使用容器中已经配置的对象。那么当我们在之后的springboot项目中,我们一般不会使用spring.xml的配置文件,而是通过注解@Configuration,@Bean的方式进行项目启动时候的容器加载功能。

2、使用样例

(1)、需要搭建好一个springboot项目

(2)、我们想手动添加一个配置到容器中,且添加一个数据库配置到数据库中

       配置文件如下,这里使用application.yml配置,注意不要使用tab键,:后需要有一个空格

   

(2)、创建实体BeanConfig对象(自定义内容)和DataSourceConfig对象(读取配置文件配置内容)

public class BeanConfig {

	private String url;
	private String username;
	private String password;

	// set和get方法

}
public class DataSourceConfig {

	private String url;
	private String username;
	private String password;

	// set和get方法

}

(3)、配置Configurer配置类

@ConfigurationProperties(prefix = "spring.datasource")为当前注入的bean对象读取配置文件以spring.datasource开头的配置项,如果之后的部分和实体类的属性一致的话,会将配置的内容注入给对象的属性中

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.zw.domain.data.BeanConfig;
import com.zw.domain.data.DataSourceConfig;

@Configuration   // 相当于springmvc中的<beans>
public class DataSourceConfigurer {	
	
	@Bean      // 相当于springmvc中的<bean>,注入DataSourceConfig对象
	@ConfigurationProperties(prefix = "spring.datasource")   // 注入DataSourceConfig对象读取配置文件,以spring.datasource为前缀,之后字段和实体类的属性一致进行匹配诸如内容
	public DataSourceConfig getDataSource(){
		return new DataSourceConfig();
	}
	
	@Bean     // 相当于springmvc中的<bean>,注入BeanConfig对象,自定义内容
    public BeanConfig transferService() {
		BeanConfig beanConfig = new BeanConfig();
		beanConfig.setUrl("11111");
		beanConfig.setUsername("name22");
		return beanConfig;
    }
}

(4)、测试类测试

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.fastjson.JSON;
import com.zw.domain.data.BeanConfig;
import com.zw.domain.data.DataSourceConfig;

@RestController
@RequestMapping(value = "test", method = {RequestMethod.POST, RequestMethod.GET})
public class TestController {

	// 取出容器中注入的DataSourceConfig对象
	@Autowired
	private DataSourceConfig dataSourceConfig;
	
	// 取出容器中注入的BeanConfig对象
	@Autowired
	private BeanConfig beanConfig;
	
	@RequestMapping("/test1")
	@ResponseBody
	public String test1() {
		System.out.println("beanConfig:"+JSON.toJSONString(beanConfig));
		System.out.println("dataSourceConfig:"+JSON.toJSONString(dataSourceConfig));
		return "";
	}
}

(5)、调用接口,测试结果

 

3、以上仅为个人学习理解,学海无涯苦作舟,见一个学一个吧!

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐