zoukankan      html  css  js  c++  java
  • Spring-boot简单的理解

    SpringBoot启动

    SpringApplication.run(MyBootApplication.class);
    

    SpringApplication.run启动SpringBoot应用,主要过程

    • 要创建Spring容器对象
    • 根据MyBootApplication注解标记功能创建Bean组件对象纳入Spring容器中(@SpringBootApplication)
    • 如果是web程序,会自动启动Tomcat服务器,并将程序发布到服务器上
    • 用户可以对SpringBoot程序访问

    @SpringBootApplication作用

    @SpringBootApplication注解是一个多功能标记,主要包含以下子标记功能:

    查看源码得知:@SpringBootApplication 被 @Configuration、@EnableAutoConfiguration、@ComponentScan 注解所修饰,换言之 Springboot 提供了统一的注解来替代以上三个注解,简化程序的配置。

    • @SpringBootConfiguration(@Configuration)

      等价于Spring Boot Bean定义标记。<bean id="xxx"></bean>

       来一个简单接口和实现类:

       

    //接口
    public interface IDeptDao {
    
        void save();
    
    }
    
    
    //实现类
    public class DeptDao implements IDeptDao {
     
        public void save(){
            System.out.println("正在配置.......");
        }
    }
    //@Configuration             //两者意义相同,@SpringBootConfiguration继承自@Configuration,二者功能也一致,标注当前类是配置类,
    @SpringBootConfiguration     //并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。
    public class MyConfigurationBean {
        
        //@Primary //主对象,默认注入时采用的对象
        @Bean//将当前的方法纳入到spring容器中,id默认为方法名
        public IDeptDao deptdao() {
            IDeptDao dept = new DeptDao();
            return dept;
        }
        
        @Bean(name="deptDao1")//将当前对象纳入到spring容器中,并指定名字
        public IDeptDao deptDao() {
            IDeptDao dept = new DeptDao();
            return dept;
        }
    
    }

    测试:

    public class TestConfigurationBean {
    //    实例化Spring Boot容器
        public static void main(String[] args) {
            ApplicationContext app = SpringApplication.run(MyBootApplication.class, args);
            DeptService bean = app.getBean("deptService", DeptService.class);
            bean.addDept();
        }
    }

    //结果:

        正在将数据加入到数据库中....
        正在配置.......

     
    • @EnableAutoConfiguration

      Spring Boot 自动配置标记。SpringBoot内置大量的自动配置组件,可以在启动时加载创建对象纳入Spring容器,例如dispatcherServlet、dataSource、jdbcTemplate等等。

      加载原理:开启@EnableAutoConfiguration标记后,调用EnableAutoConfigurationImportSelector组件加载spring-boot-autoconfigure.jar包中META-INF/spring.factories文件,文件中定义了大量自动配置组件,载入Spring容器。

      org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration,
      org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,
      org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,
      
    • @ComponentScan

      SpringBoot 扫描标记.等价于<context:component-scan base-package="xx"/>

      @ComponentScan(basePackages={"cn.xdl.service"})//等价于<context:component-scan base-package="xx"/>,指定文件夹
      //@ComponentScan//扫描当前包及子包组件,一般需要将类放到根包中cn.xdl
      public class MyComponentScanBean {
      
      }

      DeptService组件定义

              

    @Service
    public class DeptService {
    
        public void addDept(){
            System.out.println("添加一个部门信息");
        }
    
    }

    实例化Spring Boot容器:

    public static void main(String[] args) {
        ApplicationContext ac = 
            SpringApplication.run(MyBootApplication.class);
        DeptService deptService = 
            ac.getBean("deptService",DeptService.class);
        System.out.println(deptService);
        deptService.addDept();
    }

    Properties配置参数注入

    可以将application.properties文件中的参数注入给Spring容器中的Bean对象。

    @Component//扫描
    @ConfigurationProperties(prefix="spring.datasource")//配置参数注入
    public class MyBean {
    
        private String myname;//与application.properties中key相同
        private String mypassword;
    
        @Value("${db.url1}")
        private String url1;
    
        //省略set和get方法
    
    }

    @ConfigurationProperties指定将application.properties中同名参数给Bean对象属性注入,如果有key有共通前缀,可以使用prefix属性指定。如果遇到特殊key可以使用@Value标记注入。@ConfigurationProperties需要开启自动配置功能@EnableConfigurationProperties或@EnableAutoConfiguration。

    SpringBoot内置dataSource机制

    SpringBoot通过自动配置组件DataSourceAutoConfiguration,自动创建出DataSource对象,id名字为dataSource。创建过程如下:

    • 首先创建tomcat-jdbc连接池对象(spring-boot-starter-jdbc包含有)
    • 如果tomcat-jdbc创建失败,会查找创建Hikari连接池对象
    • 如果Hikari创建失败,会查找创建commons-dbcp连接池对象
    • 如果commons-dbcp创建失败,会查找创建commons-dbcp2连接池对象

    提示:spring-boot-starter-jdbc在1.x版本中配套引入tomcat-jdbc连接池,但是在2.x版本中配套引入HikariCP连接池。

    使用步骤如下:

    1. 创建maven project在pom.xml定义jdbc

      <parent>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-parent</artifactId>
          <version>1.4.7.RELEASE</version>
      </parent>
      
      <properties>
          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
          <java.version>1.8</java.version>
      </properties>
      
      <dependencies>
      
          <!-- 含有dao、aop事务、连接池包(1.x tomcat/2.x HikariCP) -->
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-jdbc</artifactId>
          </dependency>
      
          <dependency>
              <groupId>com.oracle</groupId>
              <artifactId>ojdbc6</artifactId>
              <version>11.2.0.3</version>
          </dependency>
      
      </dependencies>
    2. 在application.yml或properties追加连接参数定义

      spring:
       datasource:
        username: SCOTT
        password: TIGER
        url: jdbc:oracle:thin:@localhost:1521:XE
        driverClassName: oracle.jdbc.OracleDriver
    3. 在启动类前开启自动配置功能

      @SpringBootApplication
      public class MyBootApplication {
      
      }
    4. 测试类

      public static void main(String[] args) {
          ApplicationContext ac = 
              SpringApplication.run(MyBootApplication.class, args);
          DataSource ds = ac.getBean("dataSource",DataSource.class);
          System.out.println(ds);
      }

    创建指定连接池方法(方法一,推荐)

    在application.yml或properties追加下面参数

    spring.datasource.type=org.apache.commons.dbcp.BasicDataSource
    

    创建指定连接池方法(方法二)

    使用@Configuration+@Bean自定义dataSource对象

    @SpringBootApplication
    public class MyBootApplication {
    
        @ConfigurationProperties(prefix="spring.datasource")
        @Bean
        public DataSource dataSource(){
            BasicDataSource ds = new BasicDataSource();
            return ds;
        }
    
    }
  • 相关阅读:
    break,continue,return的区别
    java中for循环的优化
    Jquery中click函数调用遇到的诡异问题
    MVC中Controller与View的类型绑定问题
    基于8019芯片的在9S12下移植成功的TCP/IP协议族(续)
    MVC中Partialiew使用的一点小总结
    基于8019芯片的在9S12下移植成功的TCP/IP协议族(一)
    9S12单片机的模块驱动程序备忘
    prim算法(zoj1203)
    win7下安装fedora
  • 原文地址:https://www.cnblogs.com/hx1098/p/9393126.html
Copyright © 2011-2022 走看看