SpringBoot-第一天
1.学习目标
1.Spring框架发展史
2.Spring5.x应用零配置开发
3.SpringMVC应用零配置开发与部署
4.SpringBoot框架概念,优势与快速入门
5.SpringBoot核心配置
6.Freemarker & Thymeleaf模板集成
7.SpringBoot静态资源文件添加与访问
8.SpringBoot应用打包与部署
2.Spring框架的发展史
2.1. Spring1.x 时代
在 Spring1.x 时代,都是通过 xml ⽂件配置 bean,随着项⽬的不断扩⼤,需要将 xml 配置分放到不同 的配置⽂件中,需要频繁的在 java 类和 xml 配置⽂件中切换。
2.2. Spring2.x 时代
随着 JDK 1.5 带来的注解⽀持,Spring2.x 可以使⽤注解对Bean进⾏声明和注⼊,⼤⼤的减少了 xml 配 置⽂件,同时也⼤⼤简化了项⽬的开发。 那么,问题来了,究竟是应该使⽤ xml 还是注解呢? 最佳实践: 1. 应⽤的基本配置⽤ xml,⽐如:数据源、资源⽂件等; 2. 业务开发⽤注解,⽐如:Service 中注⼊ bean 等;
2.3. Spring3.x 到 Spring4.x 再到 Spring5.x
从 Spring3.x 开始提供了 Java 配置⽅式,使⽤ Java 配置⽅式可以更好的理解你配置的 Bean,现在我 们就处于这个时代,并且 Spring4.x、Spring5.x 和 Spring Boot 都推荐使⽤ java 配置的⽅式。
3.Spring 5.X 应⽤零配置开发
Spring 框架从 5.x 版本推荐使⽤注解形式来对 java 应⽤程序进⾏开发与配置,并且可以完全替代原始 的 XML + 注解形式的开发,在使⽤注解形式进⾏项⽬开发与环境配置时,Spring 框架提供了针对环境配 置与业务 bean 开发相关注解。
3.1注解
3.1.1声明Bean注解
@Component: 组件 没有明确规定其角色,作用在类级别上声明当前类为一个组件,被Spring Ioc容器维护
@Service: 在业务逻辑层(Service层)类级别进行声明
@Repository:在数据访问层(dao层)类级别声明
@Controller: 在展现层(MVC)使用 标注当前类为一个控制器
3.1.2注入Bean注解
@AutoWried: Spring官方提供注解
@Inject: JSR-330 提供注解(标准制定方)
@Resource: JSR-250 提供注解
以上三种注解在 Set ⽅法或属性上声明,⼀般情况下通⽤⼀般开发中更习惯声明在属性上,代码简洁 清晰。基于5.x 注解配置⽅式简化了xml 配置,应⽤程序开发与xml 环境配置均通过相应注解来实现。
3.1.3.Spring5.x中配置与获取Bean注解
@Configuration: 作用与类上,将当前类声明为一个配置类,相当于一个xml配置文件
@ComponentScan: 自动扫描指定包下标注有@Repository,@Service,@Controller
@Component: 注解的类并由Ioc容器进行实例化和维护
@Bean: 作用于方法上,相当于xml文件中<bean>声明当前方法返回值为一个bean
@Value: 获取property文件指定key value值
3.2.实例1-IOC中Bean的实例化与获取
3.2.1.创建Spring普通工程
在pom.xml中添加坐标相关配置
<dependencies>
<!-- spring的依赖坐标 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 指定Maven编译的JDK版本和编码 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<!-- 源代码使⽤的JDK版本 -->
<source>1.8</source>
<!-- 需要⽣成的⽬标class⽂件的编译版本 -->
<target>1.8</target>
<!-- 字符集编码 -->
<encoding>utf-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
3.2.2.创建Bean对象
UserDao.java
@Repository
public class UserDao{
public void test(){
System.out.println("UserDao.test...");
}
}
UserService.java
@Service
public class UserService{
@Resource
private UserDao userdao;
public void test(){
System.out.println("UserService.test...");
userDao.test();
}
}
3.2.3.创建IocConfig配置类
//当前类声明为一个配置类
@Configuration
//设置扫描包范围
@ComponentScan("com.xxx.springboot")
public class IocConfig{
}
3.2.4创建启动类执行测试
public class Starter{
public static void main(String[] args){
//基于Java的配置类加载Spring的应用上下文
AnnotationConfigApplicationContext ac = new
AnnotationConfigApplicationContext(IocConfig.class);
//获取指定的Bean对象
UserService userService = ac.getBean(UserService.class);
//调用Bean对象的方法
userService.test();
}
}
此时启动SpringIOC容器,通过实例化 AnnotationConfigApplicationContext类,接受配置参数类IocConfig,并获取UserService Bean实现方法调用,此时应用环境不存在xml配置文件,简化了应用的xml配置.
3.3.实例2-@Bean注解使用
使用@Bean注解声明在方法(注意:方法名一般为bean对象)
3.3.1.创建Bean对象
AccountDao.java
//注意:此时类级别并未添加@Repository注解
public class AccountDao{
public void test(){
System.out.println("AccountDao.test...");
}
}
3.3.2修改IocConfig配置类
添加返回AccountDao Bean对象方法
@Configuration
@ComponentScan("com.xxxx.springboot")
public class IocConfig02{
//返回实例化的单例Bean对象
@Bean
public AccountDao accountDao(){
return new AccountDao();
}
}
3.3.3创建启动类并执行测试
public class Starter02 {
public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new
AnnotationConfigApplicationContext(IocConfig.class);
// 判断IocConfig对象是否是单例
System.out.println(ac.isSingleton("IocConfig"));
// 获取IocConfig对象
IocConfig iocConfig = ac.getBean(IocConfig.class);
// 获取AccountDao对象
AccountDao accountDao01 = iocConfig.accountDao();
AccountDao accountDao02 = iocConfig.accountDao();
System.out.println(accountDao01 + "," + accountDao02);
accountDao01.test();
}
}
3.4.实例3-读取外部配置文件
在开发 Java web 应⽤时,配置⽂件是⽐较常⻅的,⽐如 xml,properties,yml 等⽂件,在 Spring 应 ⽤中对于配置⽂件的读取同样提供⽀持。对于配置⽂件读取,我们可以通过 @PropertySource 注解声明 到类级别来指定读取相关配置。
Spring El 表达式语⾔,⽀持在 Xml 和注解中使⽤表达式,类似于 JSP 中 EL 表达式,Spring 框架借助 该表达式实现资源注⼊,主要通过 @Value 注解来使⽤表达式,通过 @Value 注解,可以实现普通字符 串,表达式运算结果,Bean 属性⽂件内容,属性⽂件等参数注⼊。具体使⽤如下:
3.4.1.准备配置文件
src/main/resources ⽬录下添加 user.properties、jdbc.properties ⽂件
# user.properties
user.userName=admin
user.password=admin
#jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/hr?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=root
3.4.2.@PropertySource加载配置文件
通过@PropertySource加载property配置文件
@Configuration
@ComponentScan("com.xxxx")
@PropertySource(value={
"classpath:jdbc.properties","classpath:user.properties"})
public