SpringBoot Beans定义

原有Spring框架,定义Bean方法如下

  1. xml配置
  2. 组件扫描、@Controller、@Service...

原有Spring框架,参数注入方法如下

常用的参数注入有注入基本值/对象

  1. xml配置
  2. @Value、@Autowired、@Resource等

SpringBoot框架,定义Bean方法如下

  1. 利用@Configuration+@Bean
  2. 利用组件扫描@ComponentScan+@Controller\@Service\@Configuration...

SpringBoot框架,参数注入方法如下

  1. Bean对象之间注入就使用@Autowired或@Resource即可
  2. 从配置文件注入基本值@EnableConfigurationProperties(@EnableAutoConfiguration(功能包含前面的EnableConfigurationProperties))+@ConfigurationProperties+@Value("$(key)")

    可以将application.properties中的参数注入到对象中。

@SpringBootApplication注解

该注解主要包含以下功能:

  • @Configuration bean定义
  • @ComponentScan 组件扫描(路径默认是本包和子包路径)
  • @EnableAutoConfiguration 自动配置

@EnableAutoConfiguration自动配置原理

开启Spring自动配置后,会调用spring-boot-autoconfigure.jar进行处理。包中META-INF/spring.factories文件,定义了自动配置启用的功能。

例如:

org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\

org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\

org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\

org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\

org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\

org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration,\

org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration,\

org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration,\

org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration,\

org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration,\

org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration,\

org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration,\

org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration,\

org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration,\

通过自动配置,底层创建了DispatcherServlet、RequestMappingHanlderMapping、ViewResolver、DataSource、JdbcTemplate对象放入Spring容器,使用时也可以直接注入应用。

SpringBoot连接池

  1. 默认连接池使用方法

    使用方法如下:

    • 在pom.xml中追加spring-boot-stater-jdbc和驱动包支持

      <!-- 追加spring-jdbc/tomcat-jdbc连接池等 -->

      <dependency>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-starter-jdbc</artifactId>

      </dependency>

      <!-- ojdbc6引入采用了build-path -->


    • 在application.properties追加datasource定义

      spring.datasource.username=SCOTT
      spring.datasource.password=TIGER

      spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE

      spring.datasource.driverClassName=oracle.jdbc.OracleDriver

    • 从Spring容器获取dataSource和jdbcTemplate对象

      ApplicationContext ac =
      SpringApplication.run(BootBeanFactory.class);

      DataSource ds = ac.getBean("dataSource",DataSource.class);

      JdbcTemplate template =
      ac.getBean("jdbcTemplate",JdbcTemplate.class);

  2. 默认连接池规则

    在引入spring-boot-starter-jdbc后,内部包含了tomcat-jdbc包,里面有tomcat连接池.然后通过自动配置DataSourceAutoConfigurer创建DataSource对象。

    SpringBoot创建默认DataSource时,规则如下:

    • 优先寻找创建Tomcat连接池
    • 如果没有Tomcat连接池,会查找创建HikariCP
    • 如果没有HikariCP连接池,会查找创建dbcp
    • 如果没有dbcp连接池,会查找创建dbcp2
    • 可以使用spring.datasource.type属性指定连接池类型

      spring.datasource.type=org.apache.commons.dbcp.BasicDataSource
  3. 多数据源应用

    如果系统需要访问多个不同的数据库,可以手动创建多个连接池对象。(默认连接池不再创建)

    @Configuration

    public class DataSourceConfig {

    @Bean("dbcpDS1")</br>
    @Primary//注入时默认注入该类型对象</br>
    @ConfigurationProperties(prefix="spring.datasource")</br>
    public DataSource createDbcp1(){</br>

    // BasicDataSource dbcp = new BasicDataSource();


    // dbcp.setUsername("SCOTT");


    // dbcp.setPassword("TIGER");


    // dbcp.setDriverClassName("oracle.jdbc.OracleDriver");


    // dbcp.setUrl("jdbc:oracle:thin:@localhost:1521:XE");


    // return dbcp;


    DataSource dbcp = DataSourceBuilder.create()


    .type(BasicDataSource.class).build();


    return dbcp;


    }


    }


    当存在多个DataSource对象时,会引起底层注入异常,需要将某一个追加@Primary标记,指定为默认注入对象。

  4. SpringBoot DAO

    自动配置已经默认创建了JdbcTemplate对象,开发者只需要编写实体类、Dao接口、Dao实现类,注入JdbcTemplate使用。

    @Repository

    public class JdbcBookDao implements BookDao{

    @Autowired</br>
    private JdbcTemplate jdbcTemplate;</br></br> @Override</br>
    public List&lt;Book&gt; findAll() {</br>
    String sql = "select * from xdl_book";</br>
    RowMapper&lt;Book&gt; rowMapper = new BeanPropertyRowMapper&lt;Book&gt;(Book.class);</br>
    return jdbcTemplate.query(sql, rowMapper);</br>
    }</br></br>

    }


  5. SpringBoot Mybatis

    引入mybatis-spring-boot-starter集合包,会自动引入mybatis、mybatis-spring等包。

    • 在pom.xml引入mybatis-spring-boot-starter

      <!-- mybatis-spring -->

      <dependency>

      <groupId>org.mybatis.spring.boot</groupId>

      <artifactId>mybatis-spring-boot-starter</artifactId>

      <version>1.2.2</version>

      </dependency>

    • 编写实体类

      public class Product implements Serializable{

      private int id;

      private String name;

      private String keywords;

      private Date add_time;

      public int getId() {

      return id;

      }

      public void setId(int id) {

      this.id = id;

      }

      //其他省略

      }

    • 编写Mapper接口,在接口方法中定义SQL语句

      public interface ProductDao {

      @Select("select * from xdl_product")</br>
      public List&lt;Product&gt; findAll();</br></br>

      }


    • 在主启动类追加@MapperScanner标记

      @SpringBootApplication

      @MapperScan(basePackages={"cn.xdl.dao"})//扫描mapper接口创建对象

      public class BootBeanFactory {
      }


    • 获取Spring容器productDao对象使用

      ApplicationContext ac =
      SpringApplication.run(BootBeanFactory.class);

      ProductDao proDao =
      ac.getBean("productDao",ProductDao.class);

      List<Product> list = proDao.findAll();

      for(Product pro:list){

      System.out.println(pro.getId()+" "+pro.getName());

      }

SpringBoot Beans定义 连接池的更多相关文章

  1. SpringBoot 使用Hikaricp连接池

    1.添加pom.xml依赖 如果是SpringBoot2.0,那么默认的连接池就是Hikaricp,不需要配置 其他的,如果继承 <parent> <groupId>org.s ...

  2. SpringBoot下Druid连接池的使用配置

    Druid是一个JDBC组件,druid 是阿里开源在 github 上面的数据库连接池,它包括三部分: * DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体 ...

  3. springboot使用lettuce连接池

    springboot对连接池的使用非常智能,配置文件中添加lettuce.pool相关配置,则会使用到lettuce连接池,并将相关配置设置为连接池相关参数,(前提是这些参数是springboot配置 ...

  4. springboot整合druid连接池、mybatis实现多数据源动态切换

    demo环境: JDK 1.8 ,Spring boot 1.5.14 一 整合durid 1.添加druid连接池maven依赖 <dependency> <groupId> ...

  5. springboot集成druid连接池

    使用druid连接池主要有几步: 1.添加jar和依赖 <groupId>org.mybatis.spring.boot</groupId> <artifactId> ...

  6. SpringBoot 使用Druid连接池

    1.pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  7. SpringBoot 基于lettuce 连接池 配置redis多数据源操作 生产配置

    添加pom<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons- ...

  8. springboot缓存及连接池配置

    参见https://coding.imooc.com/lesson/117.html#mid=6412 1.springboot的springweb自己默认以及配置好了缓存,只需要在主文件(XxxAp ...

  9. springboot使用druid连接池连接Oracle数据库的基本配置

    #阿里连接池配置 #spring.datasource.druid.driver-class-name=oracle.jdbc.driver.OracleDriver #可配可不配,阿里的数据库连接池 ...

随机推荐

  1. Web前端开发学习误区,你掉进去了没?

    从接触网站开发以来到现在,已经有五个年头了吧,今天偶然整理电脑资料看到当时为参加系里面一个比赛而做的第一个网站时,勾起了在这网站开发道路上的一串串回忆,成功与喜悦.烦恼与纠结都历历在目,感慨颇多. 先 ...

  2. js dom node.children与node.childNodes区别

    不同点:node.children不会取到节点下面的TextNode但是node.childNodes会取到 共同点:两者都是集合类数组,可以通过索引的方式取到值也可以用for循环遍历

  3. DMA简介

    直接存储器访问 直接存储器访问(Direct Memory Access,DMA)是计算机科学中的一种内存访问技术.它可以让外设可以独立地直接读写系统存储器,而不需绕道中央处理器(CPU),DMA是一 ...

  4. FPGA内部RAM的初始化

    Altera的RAM初始化文件格式是mif和hex. QuartusII自带的RAM初始化工具很方便产生初始化文件. Xilinx的RAM初始化文件格式是coe, 在vivado中软件会将coe文件变 ...

  5. Deprecated: Assigning the return value of new by reference is deprecated in报错

    出现了Deprecated: Assigning the return value of new by reference is deprecated in wwwroot\common.inc.ph ...

  6. react基础语法(五) state和props区别和使用

    props的验证: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  7. Android(java)学习笔记169:服务(service)之为什么使用服务

    1.服务 service 长期在后台运行的进程,一般没有应用程序界面   2.进程线程和应用程序之间的关系 应用程序开启,系统启动一个Linux进程,所有的组件都是运行在同一个进程的同一个线程(mai ...

  8. 什么是WebSocket (经常听别人讲感觉很高大上其实不然)

    WebSocket 协议在2008年诞生,2011年成为国际标准.现在所有浏览器都已经支持了.WebSocket 的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真 ...

  9. PHP06 流程控制

    学习要点 选择结构 循环结构 学习目标 掌握PHP的选择结构 掌握PHP的循环结构 流程控制概述 程序 程序:一系列计算机指令的集合. 编程语言:开发程序的工具. 程序执行结构 计算机程序有三种基本执 ...

  10. Shading-jdbc源码分析-sql词法解析

    前言 前有芋艿大佬已经发过相关分析的文章,自己觉的源码总归要看一下,然后看了就要记录下来(记性很差...),所以就有了这篇文章(以后还要继续更