SpringBoot学习记录(一)
1. Spring的Java配置方式
Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置。
1.1. @Configuration 和 @Bean
Spring的Java配置方式是通过 @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;
- }
SpringBoot学习记录(一)的更多相关文章
- Springboot学习记录1--概念介绍以及环境搭建
摘要:springboot学习记录,环境搭建: 官方文档地址:https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/ht ...
- SpringBoot学习记录(二)
一. SpringBoot日志框架 SpringBoot:底层是Spring框架,Spring框架默认是用JCL(commons-logging): SpringBoot选用SLF4j和logback ...
- SpringBoot——SpringBoot学习记录【一】
前言 公司目前主要的业务,用的语言是java,所以学习下相关的技术呀,还好大学基础语言学的JAVA SpringBoot简介 官网 SpringBoot 简介 SpringBoot是用来简化Sprin ...
- SpringBoot学习记录(一)
一.SpringBoot入门 1.SpringBoot简介 简化Spring应用开发的一个框架:整个Spring技术栈的一个大整合:J2EE开发的一站式解决方案: SpringBoot的优点: (1) ...
- java后端学习记录2019
学习计划 2019年计划 1.学习计算机基础,并加以实践.包括LeetCode刷题.数据库原理(索引和锁.Sql优化等).网络协议(Http.Tcp).操作系统(加深Linux).<Http权威 ...
- Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客
==他的博客应该不错,没有细看 Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客 http://blog.csdn.net/u012706811/article/det ...
- Springboot学习07-数据源Druid
Springboot学习07-数据源Druid 关键字 Druid 前言 学习笔记 正文 1-Druid是什么 Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池.插件框架和SQL解析器 ...
- SpringCloud基础教程学习记录
这个学习记录是学习自翟永超前辈的SpringCloud的基础教程. 自己写这个教程的目的主要是在于,想要更凝练总结一些其中的一些实用点,顺便做个汇总,这样自己在复习查看的时候更加方便,也能顺着自己的思 ...
- SpringBoot学习笔记(13):日志框架
SpringBoot学习笔记(13):日志框架——SL4J 快速开始 说明 SpringBoot底层选用SLF4J和LogBack日志框架. SLF4J的使用 SpringBoot的底层依赖关系 1. ...
随机推荐
- Windows 在目录中搜索哪个文件中有指定字符串
findstr /s /i "string" *.* 表示,当前目录以及子目录下的所有文件中查找"string"这个字符串. *.*表示所有类型的文件. /s ...
- 洛谷P4116 Qtree3
题目描述 给出\(N\)个点的一棵树(\(N-1\)条边),节点有白有黑,初始全为白 有两种操作: \(0\) \(i\) : 改变某点的颜色(原来是黑的变白,原来是白的变黑) \(1\) \(v\) ...
- RabbitMQ权限
RabbitMQ 引言 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队 ...
- POJ1151 Atlantis 线段树扫描线
扫描线终于看懂了...咕咕了快三个月$qwq$ 对于所有的横线按纵坐标排序,矩阵靠下的线权值设为$1$,靠上的线权值设为$-1$,然后执行线段树区间加减,每次的贡献就是有效宽度乘上两次计算时的纵坐标之 ...
- 07.Spring Bean 加载 - BeanDefinitionReader
基本概念 BeanDefinitionReader ,该接口的作用就是加载 Bean. 在 Spring 中,Bean 一般来说都在配置文件中定义.而在配置的路径由在 web.xml 中定义.所以加载 ...
- 判断两个IP地址是不是属于同一子网的方法
一个IP地址有三种写法: 第一种,单个IP,如192.168.55.28 第二种,IP/子网掩码,如192.168.55.28/255.255.255.0 第三种,IP/子网掩码长度,如192.168 ...
- 解决mac下安装yeoman时没有权限问题
在mac下安装yeoman经常会出现如下图错误: 解决办法:在命令行执行-- sudo chown -R $USER /usr/local/lib/node_modules 回车就OK
- juypter-notebook安装配置
juypter-notebook安装配置 Table of Contents 1. jupyter notebook概述 2. jupyter notebook安装 3. 在jupyter noteb ...
- 自定义HashMap的键
用自定义的类型作为HashMap的key,必须同时重载hashCode()和equals(),才可以实现在HashMap中的查找自定义键. 例如自定义Point类: public class Poin ...
- mysql通过event和存储过程实时更新简单Demo
今天想稍微了解一下存储过程和EVENT事件,最好的方法还是直接做一个简单的demo吧 首先可以在mysql表中创建一个users表 除了设置一些username,password等必要字段以外还要设立 ...