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. 创建工程以及导入依赖

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6.  
  7. <groupId>com.javaweb</groupId>
  8. <artifactId>springboot</artifactId>
  9. <version>1.0-SNAPSHOT</version>
  10. <packaging>war</packaging>
  11.  
  12. <name>springboot Maven Webapp</name>
  13. <!-- FIXME change it to the project's website -->
  14. <url>http://www.example.com</url>
  15.  
  16. <properties>
  17. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  18. <maven.compiler.source>1.7</maven.compiler.source>
  19. <maven.compiler.target>1.7</maven.compiler.target>
  20. </properties>
  21.  
  22. <dependencies>
  23. <dependency>
  24. <groupId>org.springframework</groupId>
  25. <artifactId>spring-webmvc</artifactId>
  26. <version>4.3.7.RELEASE</version>
  27. </dependency>
  28. <!-- 连接池 -->
  29. <dependency>
  30. <groupId>com.jolbox</groupId>
  31. <artifactId>bonecp-spring</artifactId>
  32. <version>0.8.0.RELEASE</version>
  33. </dependency>
  34. </dependencies>
  35. <build>
  36. <finalName>${project.artifactId}</finalName>
  37. <plugins>
  38. <!-- 资源文件拷贝插件 -->
  39. <plugin>
  40. <groupId>org.apache.maven.plugins</groupId>
  41. <artifactId>maven-resources-plugin</artifactId>
  42. <configuration>
  43. <encoding>UTF-8</encoding>
  44. </configuration>
  45. </plugin>
  46. <!-- java编译插件 -->
  47. <plugin>
  48. <groupId>org.apache.maven.plugins</groupId>
  49. <artifactId>maven-compiler-plugin</artifactId>
  50. <configuration>
  51. <source>1.7</source>
  52. <target>1.7</target>
  53. <encoding>UTF-8</encoding>
  54. </configuration>
  55. </plugin>
  56. </plugins>
  57. <pluginManagement>
  58. <plugins>
  59. <!-- 配置Tomcat插件 -->
  60. <plugin>
  61. <groupId>org.apache.tomcat.maven</groupId>
  62. <artifactId>tomcat7-maven-plugin</artifactId>
  63. <version>2.2</version>
  64. </plugin>
  65. </plugins>
  66. </pluginManagement>
  67. </build>
  68. </project>

1.2.2. 编写User对象

  1. package com.javaweb.springboot.javaconfig;
  2.  
  3. public class User {
  4.  
  5. private String username;
  6.  
  7. private String password;
  8.  
  9. private Integer age;
  10.  
  11. public String getUsername() {
  12. return username;
  13. }
  14.  
  15. public void setUsername(String username) {
  16. this.username = username;
  17. }
  18.  
  19. public String getPassword() {
  20. return password;
  21. }
  22.  
  23. public void setPassword(String password) {
  24. this.password = password;
  25. }
  26.  
  27. public Integer getAge() {
  28. return age;
  29. }
  30.  
  31. public void setAge(Integer age) {
  32. this.age = age;
  33. }
  34.  
  35. }

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

  1. package com.javaweb.springboot.javaconfig;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. public class UserDAO {
  7.  
  8. public List<User> queryUserList(){
  9. List<User> result = new ArrayList<User>();
  10. // 模拟数据库的查询
  11. for (int i = 0; i < 10; i++) {
  12. User user = new User();
  13. user.setUsername("username_" + i);
  14. user.setPassword("password_" + i);
  15. user.setAge(i + 1);
  16. result.add(user);
  17. }
  18. return result;
  19. }
  20.  
  21. }

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

  1. package com.javaweb.springboot.javaconfig;
  2.  
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Service;
  5.  
  6. import java.util.List;
  7.  
  8. @Service
  9. public class UserService {
  10.  
  11. @Autowired // 注入Spring容器中的bean对象
  12. private UserDAO userDAO;
  13.  
  14. public List<User> queryUserList() {
  15. // 调用userDAO中的方法进行查询
  16. return this.userDAO.queryUserList();
  17. }
  18.  
  19. }

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

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

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

  1. package com.javaweb.springboot.javaconfig;
  2.  
  3. import org.springframework.context.annotation.AnnotationConfigApplicationContext;
  4.  
  5. import java.util.List;
  6.  
  7. public class Main {
  8.  
  9. public static void main(String[] args) {
  10. // 通过Java配置来实例化Spring容器
  11. AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
  12.  
  13. // 在Spring容器中获取Bean对象
  14. UserService userService = context.getBean(UserService.class);
  15.  
  16. // 调用对象中的方法
  17. List<User> list = userService.queryUserList();
  18. for (User user : list) {
  19. System.out.println(user.getUsername() + ", " + user.getPassword() + ", " + user.getPassword());
  20. }
  21.  
  22. // 销毁该容器
  23. context.destroy();
  24. }
  25.  
  26. }

1.2.7. 测试效果

1.2.8. 小结

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

1.3. 实战

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

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

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

思考:

如何配置多个配置文件?

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

1.3.2. 配置数据库连接池

  1. <!-- 连接池 -->
  2. <dependency>
  3. <groupId>com.jolbox</groupId>
  4. <artifactId>bonecp-spring</artifactId>
  5. <version>0.8.0.RELEASE</version>
  6. </dependency>

之前的Spring xml配置:

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

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

  1. @Value("${jdbc.url}")
  2. private String jdbcUrl;
  3.  
  4. @Value("${jdbc.driverClassName}")
  5. private String jdbcDriverClassName;
  6.  
  7. @Value("${jdbc.username}")
  8. private String jdbcUsername;
  9.  
  10. @Value("${jdbc.password}")
  11. private String jdbcPassword;
  12.  
  13. @Bean(destroyMethod = "close")
  14. public DataSource dataSource() {
  15. BoneCPDataSource boneCPDataSource = new BoneCPDataSource();
  16. // 数据库驱动
  17. boneCPDataSource.setDriverClass(jdbcDriverClassName);
  18. // 相应驱动的jdbcUrl
  19. boneCPDataSource.setJdbcUrl(jdbcUrl);
  20. // 数据库的用户名
  21. boneCPDataSource.setUsername(jdbcUsername);
  22. // 数据库的密码
  23. boneCPDataSource.setPassword(jdbcUsername);
  24. // 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0
  25. boneCPDataSource.setIdleConnectionTestPeriodInMinutes(60);
  26. // 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0
  27. boneCPDataSource.setIdleMaxAgeInMinutes(30);
  28. // 每个分区最大的连接数
  29. boneCPDataSource.setMaxConnectionsPerPartition(100);
  30. // 每个分区最小的连接数
  31. boneCPDataSource.setMinConnectionsPerPartition(5);
  32. return boneCPDataSource;
  33. }

SpringBoot学习记录(一)的更多相关文章

  1. Springboot学习记录1--概念介绍以及环境搭建

    摘要:springboot学习记录,环境搭建: 官方文档地址:https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/ht ...

  2. SpringBoot学习记录(二)

    一. SpringBoot日志框架 SpringBoot:底层是Spring框架,Spring框架默认是用JCL(commons-logging): SpringBoot选用SLF4j和logback ...

  3. SpringBoot——SpringBoot学习记录【一】

    前言 公司目前主要的业务,用的语言是java,所以学习下相关的技术呀,还好大学基础语言学的JAVA SpringBoot简介 官网 SpringBoot 简介 SpringBoot是用来简化Sprin ...

  4. SpringBoot学习记录(一)

    一.SpringBoot入门 1.SpringBoot简介 简化Spring应用开发的一个框架:整个Spring技术栈的一个大整合:J2EE开发的一站式解决方案: SpringBoot的优点: (1) ...

  5. java后端学习记录2019

    学习计划 2019年计划 1.学习计算机基础,并加以实践.包括LeetCode刷题.数据库原理(索引和锁.Sql优化等).网络协议(Http.Tcp).操作系统(加深Linux).<Http权威 ...

  6. Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客

    ==他的博客应该不错,没有细看 Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客 http://blog.csdn.net/u012706811/article/det ...

  7. Springboot学习07-数据源Druid

    Springboot学习07-数据源Druid 关键字 Druid 前言 学习笔记 正文 1-Druid是什么 Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池.插件框架和SQL解析器 ...

  8. SpringCloud基础教程学习记录

    这个学习记录是学习自翟永超前辈的SpringCloud的基础教程. 自己写这个教程的目的主要是在于,想要更凝练总结一些其中的一些实用点,顺便做个汇总,这样自己在复习查看的时候更加方便,也能顺着自己的思 ...

  9. SpringBoot学习笔记(13):日志框架

    SpringBoot学习笔记(13):日志框架——SL4J 快速开始 说明 SpringBoot底层选用SLF4J和LogBack日志框架. SLF4J的使用 SpringBoot的底层依赖关系 1. ...

随机推荐

  1. Windows 在目录中搜索哪个文件中有指定字符串

    findstr /s /i "string" *.* 表示,当前目录以及子目录下的所有文件中查找"string"这个字符串. *.*表示所有类型的文件. /s ...

  2. 洛谷P4116 Qtree3

    题目描述 给出\(N\)个点的一棵树(\(N-1\)条边),节点有白有黑,初始全为白 有两种操作: \(0\) \(i\) : 改变某点的颜色(原来是黑的变白,原来是白的变黑) \(1\) \(v\) ...

  3. RabbitMQ权限

    RabbitMQ 引言 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队 ...

  4. POJ1151 Atlantis 线段树扫描线

    扫描线终于看懂了...咕咕了快三个月$qwq$ 对于所有的横线按纵坐标排序,矩阵靠下的线权值设为$1$,靠上的线权值设为$-1$,然后执行线段树区间加减,每次的贡献就是有效宽度乘上两次计算时的纵坐标之 ...

  5. 07.Spring Bean 加载 - BeanDefinitionReader

    基本概念 BeanDefinitionReader ,该接口的作用就是加载 Bean. 在 Spring 中,Bean 一般来说都在配置文件中定义.而在配置的路径由在 web.xml 中定义.所以加载 ...

  6. 判断两个IP地址是不是属于同一子网的方法

    一个IP地址有三种写法: 第一种,单个IP,如192.168.55.28 第二种,IP/子网掩码,如192.168.55.28/255.255.255.0 第三种,IP/子网掩码长度,如192.168 ...

  7. 解决mac下安装yeoman时没有权限问题

    在mac下安装yeoman经常会出现如下图错误: 解决办法:在命令行执行-- sudo chown -R $USER /usr/local/lib/node_modules 回车就OK

  8. juypter-notebook安装配置

    juypter-notebook安装配置 Table of Contents 1. jupyter notebook概述 2. jupyter notebook安装 3. 在jupyter noteb ...

  9. 自定义HashMap的键

    用自定义的类型作为HashMap的key,必须同时重载hashCode()和equals(),才可以实现在HashMap中的查找自定义键. 例如自定义Point类: public class Poin ...

  10. mysql通过event和存储过程实时更新简单Demo

    今天想稍微了解一下存储过程和EVENT事件,最好的方法还是直接做一个简单的demo吧 首先可以在mysql表中创建一个users表 除了设置一些username,password等必要字段以外还要设立 ...