SpringBoot Beans管理和自动配置
SpringBoot Beans管理和自动配置 火推 02
SpringBoot Beans管理和自动配置

@SpringBootApplication
该标记是由若干个标记合成,包含Bean定义、组件扫描、自动配置等功能。主要包含以下标记
- @SpringBootConfiguration-->@Configuration-->@Component
- @ComponentScan
- @EnableAutoConfiguration
@Configuration+@Bean
作用:可以将程序中的Bean对象放入Spring容器中。 一般会使用@Configuration+@Bean组合。
注解标记使用格式:
@Configuration//配置类
public class DaoConfig {
@Bean(name="userDao")//将返回的UserDao对象加入Spring容器,默认id是方法名</br>
public UserDao createUserDao(){</br>
return new JdbcUserDao();</br>
}</br></br>
@Bean(name="bookDao")</br>
public BookDao createBookDao(){</br>
return new JdbcBookDao();</br>
}</br>
}
创建SpringBoot的Spring容器:
public static void main(String[] args){
ApplicationContext ac =
SpringApplication.run(DaoConfig.class, args);
UserDao userDao = ac.getBean("userDao",UserDao.class);
userDao.save();
BookDao bookDao = ac.getBean("bookDao",BookDao.class);
bookDao.load();
}
提示:@Bean默认是单例对象,可以使用@Scope("prototype")改变。@Import标记可以引入其他@Configuration配置类
@Configuration//配置类
@Import(DataSourceConfig.class)//导入另一个配置类
public class DaoConfig {
//... ...
}
@ComponentScan
作用:开启组件扫描,等价于<context:component-scan base-package="xx"/>配置。
在入口类中追加@ComponentScan指定
@ComponentScan(basePackages={"cn.xdl.config.service"})
public class ComponetScanConfig {
}
service组件
package cn.xdl.config.service;
import org.springframework.stereotype.Service;
@Service("userService")
public class UserServiceImpl implements UserService{
@Override</br>
public void regist() {</br>
System.out.println("用户注册处理");</br>
}</br>
}
创建SpringBoot的Spring容器:
ApplicationContext ac =
SpringApplication.run(ComponetScanConfig.class, args);
UserService service =
ac.getBean("userService",UserService.class);
service.regist();
提示:@ComponentScan可以指定basePackage扫描路径;不指定默认扫描当前包和子包组件。
使用提示:jar包组件采用@Bean模式纳入Spring容器;自己编写的组件采用组件扫描纳入Spring容器。
项目代码包结构
建议采用下面包结构组织代码
提示:@Configuration包含@Component标记,适用于组件扫描加载。
@EnableAutoConfiguration
SpringBoot核心自动配置,启动自动配置后,Spring容器会自动去spring-boot-autoconfigure.jar,在它META-INF/spring.factories文件加载一系列功能的自动配置组件。例如DataSourceAutoConfiguration、JdbcTemplateAutoConfiguration、AopAutoConfiguration、WebMvcAutoConfiguration等功能。通过自动配置加载这些组件,创建功能相关的对象。
参数注入
通过自动配置组件ConfigurationPropertiesAutoConfiguration支持@ConfigurationProperties标记。
作用:将application.properties中的参数值注入到某个Bean对象中。
使用方法:
@Component("dbparams")//扫描
@ConfigurationProperties//注入properties参数
public class DB {
private String username;//注入username值</br></br>
private String password;//注入password值</br></br>
//省略set和get方法 </br>
}
提示:如果使用@ConfigurationProperties(prefix="db")会注入db.username值和db.password值。
注意:@ConfigurationProperties需要@EnabledAutoConfiguration或@SpringBootApplication开启自动配置才能用。
@ComponentScan
@Configuration
@EnableAutoConfiguration
public class MyBootApplication {
public static void main(String[] args){</br>
//@ComponentScan加载扫描配置</br>
ApplicationContext ac =
SpringApplication.run(MyBootApplication.class, args);</br>
//省略...</br>
}</br>
}
或
@SpringBootApplication//一个标记顶前面3个
public class MyBootApplication {
public static void main(String[] args){</br>
//@ComponentScan加载扫描配置</br>
ApplicationContext ac =
SpringApplication.run(MyBootApplication.class, args);</br>
//省略...</br>
}</br>
}
SpringBoot连接池应用
SpringBoot可以通过自动配置创建出DataSource对象;程序员也可以手动创建。
需要引入spring-boot-starter-jdbc数据库访问部分的jar包支持。
SpringBoot默认连接池
SpringBoot可以默认创建连接池对象,创建出的对象id名为dataSource.创建机制如下:
优先创建tomcat-jdbc连接池对象。
(需要引入spring-boot-starter-jdbc.jar包支持)
没有tomcat-jdbc,会创建HikariCP连接池对象
(需要引入hikaricp.jar支持)
没有HikariCP,会创建dbcp连接池对象
(需要引入dbcp.jar支持)
没有dbcp,会创建dbcp2连接池对象
(需要引入dbcp2.jar支持)
SpringBoot默认连接池参数定义如下:
application.properties
spring.datasource.username=xxx
spring.datasource.password=xxx
spring.datasource.url=xxx
spring.datasource.driver-class-name=xxx
可以通过spring.datasource.type参数指定创建连接池对象类型。
多个数据源时,需要手动创建连接池
手动创建连接池代码:
@Configuration
public class DataSourceConfig {
@Bean(name="dbcp2")</br>
@ConfigurationProperties(prefix="db.datasource2")</br>
public DataSource createDbcp2(){</br>
// BasicDataSource ds = new BasicDataSource();
// return ds;
DataSource ds = DataSourceBuilder.create()
.type(BasicDataSource.class).build();
return ds;
}
@Bean(name="dbcp1")</br>
@Primary//默认采用该连接池</br>
@ConfigurationProperties(prefix="db.datasource1")</br>
public DataSource createDbcp1(){</br>
DataSource ds = DataSourceBuilder.create()</br>
.type(BasicDataSource.class).build();</br>
return ds;</br>
}</br>
}
数据源连接参数定义:
#datasource1
db.datasource1.username=SCOTT
db.datasource1.password=TIGER
db.datasource1.url=jdbc:oracle:thin:@localhost:1521:XE
#datasource2
db.datasource2.username=SCOTT
db.datasource2.password=TIGER
db.datasource2.url=jdbc:oracle:thin:@localhost:1521:XE
db.datasource2.driverClassName=oracle.jdbc.OracleDriver
注意:手动创建连接池对象后,Boot默认连接池不再创建。
JdbcTemplate应用
SpringBoot采用自动配置会使用默认dataSource对象创建一个JdbcTemplate对象。编写Dao组件时直接注入使用即可。例如
@Repository("deptDao")//扫描
public class JdbcDeptDao implements DeptDao{
@Autowired//注入</br>
private JdbcTemplate template;</br></br>
@Override</br>
public List<Dept> findAll() {</br>
String sql = "select deptno,dname name,loc from dept";</br>
RowMapper<Dept> rowMapper = </br>
new BeanPropertyRowMapper<Dept>(Dept.class);//属性名和字段名一致进行封装</br>
return template.query(sql, rowMapper);</br>
}</br>
}
</article>
</div>
SpringBoot Beans管理和自动配置的更多相关文章
- 面试官:给我讲讲SpringBoot的依赖管理和自动配置?
1.前言 从Spring转到SpringBoot的xdm应该都有这个感受,以前整合Spring + MyBatis + SpringMVC我们需要写一大堆的配置文件,堪称配置文件地狱,我们还要在pom ...
- SpringBoot原理深入及源码剖析(一) 依赖管理及自动配置
前言 传统的Spring框架实现一个Web服务需要导入各种依赖jar包,然后编写对应的XML配置文件等,相较而言,SpringBoot显得更加方便.快捷和高效.那么,SpringBoot究竟是如何做到 ...
- java框架之SpringBoot(5)-SpringMVC的自动配置
本篇文章内容详细可参考官方文档第 29 节. SpringMVC介绍 SpringBoot 非常适合 Web 应用程序开发.可以使用嵌入式 Tomcat,Jetty,Undertow 或 Netty ...
- SpringBoot:配置文件及自动配置原理
西部开源-秦疆老师:基于SpringBoot 2.1.6 的博客教程 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处!防君子不防小人,共勉! SpringBoot ...
- Springboot学习:SpringMVC自动配置
Spring MVC auto-configuration Spring Boot 自动配置好了SpringMVC 以下是SpringBoot对SpringMVC的默认配置:==(WebMvcAuto ...
- SpringBoot是如何实现自动配置的?--SpringBoot源码(四)
注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接 助力SpringBoot自动配置的条件注解ConditionalOnXXX分析--SpringBoot源码(三 ...
- 这一次搞懂SpringBoot核心原理(自动配置、事件驱动、Condition)
@ 目录 前言 正文 启动原理 事件驱动 自动配置原理 Condition注解原理 总结 前言 SpringBoot是Spring的包装,通过自动配置使得SpringBoot可以做到开箱即用,上手成本 ...
- SpringBoot自定义starter及自动配置
SpringBoot的核心就是自动配置,而支持自动配置的是一个个starter项目.除了官方已有的starter,用户自己也可以根据规则自定义自己的starter项目. 自定义starter条件 自动 ...
- SpringBoot自动化配置之四:SpringBoot 之Starter(自动配置)、Command-line runners
Spring Boot Starter是在SpringBoot组件中被提出来的一种概念,stackoverflow上面已经有人概括了这个starter是什么东西,想看完整的回答戳这里 Starter ...
随机推荐
- ES6—带默认值的函数参数及其作用域
在学习ES6函数一章时,发现了一个有意思的现象,原文描述如下: 这段话主要state了3个事实: ①函数参数有默认值时,会在声明初始化阶段形成一个单独的作用域 ②这个作用域在初始化结束后消失 ③没默认 ...
- OCP 11g 第一章练习
练习 1-1 研究所在环境的DBMS 这是一个书面练习,没有具体的解决方案. 确定自己所在环境使用的应用程序, 应用服务器 , 和数据库. 然后集中精力研究数据库, 体验一下数据库的规模和忙碌程度. ...
- javascript动态添加、修改、删除对象的属性与方法
在其他语言中,对象一旦生成,就不可更改了,要为一个对象添加修改成员必须要在对应的类中修改,并重新实例化,而且程序必须经过重新编译.JavaScript 中却非如此,它提供了灵活的机制来修改对象的行为, ...
- Python学前基础知识
Python基础计算机常识:硬件性能:CPU.内存输入设备:鼠标.键盘外部存储设备:硬盘输出设备;显示器.打印机(不算自带)通讯设备:无线网卡----------------------------- ...
- Unity Shader-热空气扭曲效果
GrabPass GrabPass是Unity为我们提供的一个很方便的功能,可以直接将当前屏幕内容渲染到一张贴图上,我们可以直接在shader中使用这张贴图而不用自己去实现渲染到贴图这样的一个过程,大 ...
- docker 新手入门 (阿里镜像仓库的使用)
创建镜像仓库后的步骤是: https://help.aliyun.com/document_detail/60743.html?spm=a2c4g.11186623.6.546.79be52f3y ...
- shift Alt + up(down) copy current line ! ctrl + j show the control # vscode key
shift Alt + up(down) copy current line ! ctrl + j show the control # vscode key
- iview table的render()函数基本的用法
render:(h,params) => { return h(" 定义的元素 ",{ 元素的性质 }," 元素的内容"/[元素的内容]) }
- render_to_response()
render_to_response('模板名称',字典) 字典:第二个参数必须是为该模板创建context时所使用的字典,如果不提供第二个参数,render_response()使用一个空字典
- G7或变G6+1?特朗普七国峰会箱友军开炮
今日导读 G7 峰会刚召开完毕,德国总理默克尔发的一张照片就迅速火遍全球.照片中她身体前倾,像是在质问特朗普,而后者则双手交叉胸前,我自岿然不动,这张火药味十足的照片不禁让人脑补当时剑拔弩张的气氛.到 ...