zoukankan      html  css  js  c++  java
  • SpringBoot学习记录(一)

    1. SpringJava配置方式

    Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置。

    1.1. @Configuration @Bean

    SpringJava配置方式是通过 @Configuration @Bean 这两个注解实现的:

    1@Configuration 作用于类上,相当于一个xml配置文件;

    2@Bean 作用于方法上,相当于xml配置中的<bean>

    1.2. 示例

    该示例演示了通过Java配置的方式进行配置Spring,并且实现了Spring IOC功能。

    1.2.1. 创建工程以及导入依赖

    <?xml version="1.0" encoding="UTF-8"?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.javaweb</groupId>
      <artifactId>springboot</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>war</packaging>
    
      <name>springboot Maven Webapp</name>
      <!-- FIXME change it to the project's website -->
      <url>http://www.example.com</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>4.3.7.RELEASE</version>
        </dependency>
        <!-- 连接池 -->
        <dependency>
          <groupId>com.jolbox</groupId>
          <artifactId>bonecp-spring</artifactId>
          <version>0.8.0.RELEASE</version>
        </dependency>
      </dependencies>
      <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
          <!-- 资源文件拷贝插件 -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <configuration>
              <encoding>UTF-8</encoding>
            </configuration>
          </plugin>
          <!-- java编译插件 -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
              <source>1.7</source>
              <target>1.7</target>
              <encoding>UTF-8</encoding>
            </configuration>
          </plugin>
        </plugins>
        <pluginManagement>
          <plugins>
            <!-- 配置Tomcat插件 -->
            <plugin>
              <groupId>org.apache.tomcat.maven</groupId>
              <artifactId>tomcat7-maven-plugin</artifactId>
              <version>2.2</version>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </project>

    1.2.2. 编写User对象

    package com.javaweb.springboot.javaconfig;
    
    public class User {
    
        private String username;
    
        private String password;
    
        private Integer age;
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
    }

    1.2.3. 编写UserDAO 用于模拟与数据库的交互

    package com.javaweb.springboot.javaconfig;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class UserDAO {
        
        public List<User> queryUserList(){
            List<User> result = new ArrayList<User>();
            // 模拟数据库的查询
            for (int i = 0; i < 10; i++) {
                User user = new User();
                user.setUsername("username_" + i);
                user.setPassword("password_" + i);
                user.setAge(i + 1);
                result.add(user);
            }
            return result;
        }
    
    }

    1.2.4. 编写UserService 用于实现User数据操作业务逻辑

    package com.javaweb.springboot.javaconfig;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    @Service
    public class UserService {
    
        @Autowired // 注入Spring容器中的bean对象
        private UserDAO userDAO;
    
        public List<User> queryUserList() {
            // 调用userDAO中的方法进行查询
            return this.userDAO.queryUserList();
        }
    
    }

    1.2.5. 编写SpringConfig 用于实例化Spring容器

    package com.javaweb.springboot.javaconfig;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
    @ComponentScan(basePackages = "com.javaweb.springboot.javaconfig") //配置扫描包
    public class SpringConfig {
        
        @Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
        public UserDAO getUserDAO(){
            return new UserDAO(); // 直接new对象做演示
        }
        
    }

    1.2.6. 编写测试方法 用于启动Spring容器

    package com.javaweb.springboot.javaconfig;
    
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    import java.util.List;
    
    public class Main {
        
        public static void main(String[] args) {
            // 通过Java配置来实例化Spring容器
            AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
            
            // 在Spring容器中获取Bean对象
            UserService userService = context.getBean(UserService.class);
            
            // 调用对象中的方法
            List<User> list = userService.queryUserList();
            for (User user : list) {
                System.out.println(user.getUsername() + ", " + user.getPassword() + ", " + user.getPassword());
            }
            
            // 销毁该容器
            context.destroy();
        }
    
    }

    1.2.7. 测试效果

    1.2.8. 小结

    从以上的示例中可以看出,使用Java代码就完美的替代xml配置文件,并且结构更加的清晰。

    1.3. 实战

    1.3.1. 读取外部的资源配置文件

    通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法:

    @Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
    @ComponentScan(basePackages = "cn.itcast.springboot.javaconfig") //配置扫描包
    @PropertySource(value= {"classpath:jdbc.properties"})
    public class SpringConfig {
        
        @Value("${jdbc.url}")
        private String jdbcUrl;
        
        @Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
        public UserDAO getUserDAO(){
            return new UserDAO(); // 直接new对象做演示
        }
        
    }

    思考:

    如何配置多个配置文件?

    如果配置的配置文件不存在会怎么样?

    1.3.2. 配置数据库连接池

    <!-- 连接池 -->
            <dependency>
                <groupId>com.jolbox</groupId>
                <artifactId>bonecp-spring</artifactId>
                <version>0.8.0.RELEASE</version>
            </dependency>

    之前的Spring xml配置:

    <!-- 定义数据源 -->
        <bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"
            destroy-method="close">
            <!-- 数据库驱动 -->
            <property name="driverClass" value="${jdbc.driverClassName}" />
            <!-- 相应驱动的jdbcUrl -->
            <property name="jdbcUrl" value="${jdbc.url}" />
            <!-- 数据库的用户名 -->
            <property name="username" value="${jdbc.username}" />
            <!-- 数据库的密码 -->
            <property name="password" value="${jdbc.password}" />
            <!-- 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0 -->
            <property name="idleConnectionTestPeriod" value="60" />
            <!-- 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0 -->
            <property name="idleMaxAge" value="30" />
            <!-- 每个分区最大的连接数 -->
            <!-- 
                判断依据:请求并发数
             -->
            <property name="maxConnectionsPerPartition" value="100" />
            <!-- 每个分区最小的连接数 -->
            <property name="minConnectionsPerPartition" value="5" />
        </bean>

    参考xml配置改造成java配置方式:

    @Value("${jdbc.url}")
        private String jdbcUrl;
    
        @Value("${jdbc.driverClassName}")
        private String jdbcDriverClassName;
    
        @Value("${jdbc.username}")
        private String jdbcUsername;
    
        @Value("${jdbc.password}")
        private String jdbcPassword;
    
        @Bean(destroyMethod = "close")
        public DataSource dataSource() {
            BoneCPDataSource boneCPDataSource = new BoneCPDataSource();
            // 数据库驱动
            boneCPDataSource.setDriverClass(jdbcDriverClassName);
            // 相应驱动的jdbcUrl
            boneCPDataSource.setJdbcUrl(jdbcUrl);
            // 数据库的用户名
            boneCPDataSource.setUsername(jdbcUsername);
            // 数据库的密码
            boneCPDataSource.setPassword(jdbcUsername);
            // 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0
            boneCPDataSource.setIdleConnectionTestPeriodInMinutes(60);
            // 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0
            boneCPDataSource.setIdleMaxAgeInMinutes(30);
            // 每个分区最大的连接数
            boneCPDataSource.setMaxConnectionsPerPartition(100);
            // 每个分区最小的连接数    
            boneCPDataSource.setMinConnectionsPerPartition(5);
            return boneCPDataSource;
    }
  • 相关阅读:
    scala之伴生对象的继承
    scala之伴生对象说明
    “Failed to install the following Android SDK packages as some licences have not been accepted” 错误
    PATH 环境变量重复问题解决
    Ubuntu 18.04 配置java环境
    JDBC的基本使用2
    DCL的基本语法(授权)
    ZJNU 1374
    ZJNU 2184
    ZJNU 1334
  • 原文地址:https://www.cnblogs.com/FanJava/p/9405637.html
Copyright © 2011-2022 走看看