SpringBoot Beans管理和自动配置 火推 02
2017-12-20 21:37
375 查看
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是方法名 public UserDao createUserDao(){ return new JdbcUserDao(); } @Bean(name="bookDao") public BookDao createBookDao(){ return new JdbcBookDao(); } }
创建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 public void regist() { System.out.println("用户注册处理"); } }
创建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标记,适用于组件扫描加载。
@EnableAutoConfiguratio
4000
n
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值 private String password;//注入password值 //省略set和get方法 }
提示:如果使用@ConfigurationProperties(prefix="db")会注入db.username值和db.password值。
注意:@ConfigurationProperties需要@EnabledAutoConfiguration或@SpringBootApplication开启自动配置才能用。
@ComponentScan @Configuration @EnableAutoConfiguration public class MyBootApplication { public static void main(String[] args){ //@ComponentScan加载扫描配置 ApplicationContext ac = SpringApplication.run(MyBootApplication.class, args); //省略... } }
或
@SpringBootApplication//一个标记顶前面3个 public class MyBootApplication { public static void main(String[] args){ //@ComponentScan加载扫描配置 ApplicationContext ac = SpringApplication.run(MyBootApplication.class, args); //省略... } }
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") @ConfigurationProperties(prefix="db.datasource2") public DataSource createDbcp2(){ // BasicDataSource ds = new BasicDataSource(); // return ds; DataSource ds = DataSourceBuilder.create() .type(BasicDataSource.class).build(); return ds; } @Bean(name="dbcp1") @Primary//默认采用该连接池 @ConfigurationProperties(prefix="db.datasource1") public DataSource createDbcp1(){ DataSource ds = DataSourceBuilder.create() .type(BasicDataSource.class).build(); return ds; } }
数据源连接参数定义:
#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//注入 private JdbcTemplate template; @Override public List<Dept> findAll() { String sql = "select deptno,dname name,loc from dept"; RowMapper<Dept> rowMapper = new BeanPropertyRowMapper<Dept>(Dept.class);//属性名和字段名一致进行封装 return template.query(sql, rowMapper); } }
相关文章推荐
- Spring如何设置让事务自动提交和回滚?Spring两种事务管理方式的配置及使用
- 学生信息管理系统beans,spring+hibernate配置
- Idea 打包maven项目 以及spring boot 的自动配置
- Spring 编程式事务管理xml文件配置问题org.springframework.beans.NotWritablePropertyException: Invalid property
- Spring boot中@Conditional和spring boot的自动配置实例详解
- Spring与Hibernate的整合,不配置事务管理器,事务会自动提交(Hibernate默认手动提交)
- SpringBoot自动配置小记
- Spring Boot 动态数据源(yml配置,多数据源自动切换)
- (四)Spring Boot自动配置介绍,以及日志配置
- spring boot配置mybatis和事务管理
- [Spring Boot] 3. Spring Boot实现自动配置的基础
- spring boot + jpa/hibernate配置 failOnEmptyBeans和serializationInclusion
- 《Spring Boot极简教程》第5章 Spring Boot自动配置原理
- SpringBoot学习笔记(3) Spring Boot 运行原理,自动配置
- Spring Beans 自动装配 使用XML配置列子(带源码)
- 参照SpringBoot的自动配置
- 学记:为spring boot写一个自动配置
- springboot 启动mongoDB报错之禁用mongoDB自动配置
- [Spring Boot] 4. Spring Boot实现自动配置的原理
- Intellij IDEA springboot maven 配置mybatis-generator,自动从数据库中生成代码