1、今天稍微学习了一下Spring Boot的运行机制,在这里把我收获到的知识分享出来,是对Spring Boot运行机制的一点点个人的看法。
2、大家看到SpringBoot项目的时候最大的疑惑应该是为什么本来SSM里的那些xml配置文件都不见了呢,其实Spring Boot是对现在许多主流的第三方框架进行了整合,我们可以在一个空项目的pom文件中看到下边这样的配置,其实仔细研究一下就可以看到在项目构建起来之后SpringBoot就已经帮我下载好好多jar包了。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
3、没有xml文件的原因是Spring支持通过注解的方式来配置出一个与写xml文件具有相同效果的类,这个类用@Configuration注解标注,然后再在这个类中像在xml文件中配置<bean>一样使用一个@Bean注解来标注一个方法,这样子合起来就像是配置了一个xml文件一样啦。
4、说太多也有点晕,直接上代码吧。
1、怎么构建项目就不多说啦,不会的看前前章。
2、首先是pom文件,没啥好说明的,直接给出来啦
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<druid.version>1.1.6</druid.version>
<mysql-version>5.1.44</mysql-version>
<spring-verison>4.3.17.RELEASE</spring-verison>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--spring jdbc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--阿里巴巴数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3、这一次我们使用JdbcTemplate来测试,小伙伴们先自己创建一个数据库,越简单越好,或者用你以前用的哪一个数据库都ok,在resource文件夹下新建db.properties文件来保存数据库链接的一些数据
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/weibo
jdbc.username = root
jdbc.password = 123456
4、新建一个JdbcTemplate类,放在这里,具体的讲解穿插在代码里咯
package com.example.demo;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
/**
* @Confuguration 注解告诉Spring Boot这是一个相当于xml配置文件的类
* @PropertySource 注解可以指定使用哪一个资源文件
*/
@Configuration
@PropertySource(value = {"classpath:db.properties"})
public class JdbcTemplateApplication {
/**
* 使用Value注解可以引入配置文件中的对应的值,注意使用${}
*/
@Value("${jdbc.driver}")
private String driverClassName;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
/**
* 配置数据源
* @baan 的效果i相当于在xml文件中使用<bean>返回值注意要写需要的数据类型
*/
@Bean
public DataSource getDataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(driverClassName);
druidDataSource.setUrl(url);
druidDataSource.setUsername(username);
druidDataSource.setPassword(password);
return druidDataSource;
}
/**
* 配置jdbcTemplate
*/
@Bean
public JdbcTemplate getTemplate(){
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(getDataSource());
return jdbcTemplate;
}
}
5、在Test->java下新建测试类
package com.example.demo;
import com.example.demo.Service.HelloService;
import com.example.demo.domain.User;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestConfiguration {
// @Test
// public void test(){
// AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(DemoApplication.class);
// HelloService helloService = applicationContext.getBean(HelloService.class);
// System.out.println(helloService.sayHello());
// }
@Test
public void testJdbcTemplate(){
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(JdbcTemplateApplication.class);
JdbcTemplate jdbcTemplate = applicationContext.getBean(JdbcTemplate.class);
String sql = "select id, username, password from weibo_user where id = ?";
// 通过rowMapper来确定将结果集中的据映射到java对象
RowMapper<User> rowMapper1 = new BeanPropertyRowMapper<>(User.class);
User user1 = jdbcTemplate.queryForObject(sql, rowMapper1,2);
System.out.println(user1);
}
}
6、通过运行测试类我们可以看到想要的结果,这可以说明在Spring Boot 中可以使用类注解来实现配置xml文件相同的效果,这也就可以解释一点点为什么不用配置文件了