springboot的学习策略:
以项目为驱动
SpringBoot的诞生是为了解决我们使用Spring的配置问题的,比如
开启某些Spring特性时,比如事务管理和Spring MVC,还是需要用XML或Java进行显式配置。启用第三方库时也需要显式配置,比如基于Thymeleaf的Web视图。
配置Servlet和过滤器(比如Spring的DispatcherServlet)同样需要在web.xml或Servlet初始化代码里进行显式配置。组件扫描(注解)减少了配置量,Java配置让它看上去简洁不少,但Spring还是需要不少配置。
光配置这些XML文件都够我们头疼的了,占用了我们大部分时间和精力。除此之外,相关库的依赖非常让人头疼,不同库之间的版本冲突也非常常见
所以Spring Boot诞生了,它的出现,解决了我们头疼的配置问题
官网这么描述SpringBoot:
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”…Most Spring Boot applications need very little Spring configuration.
(Spring Boot可以轻松创建独立的生产级基于Spring的应用程序,只要通过 “just run”(可能是run ‘Application’或java -jar 或 tomcat 或 maven插件run 或 shell脚本)便可以运行项目。大部分Spring Boot项目只需要少量的配置即可)
从本质上来说,Spring Boot就是Spring,它做了那些没有它你自己也会去做的Spring Bean配置
方式一:你可以通过 https://start.spring.io/ 官网指引来快速生成一个 Spring Boot 的项目
方式二:通过IDEA的SpringBoot脚手架快速创建Springboot项目
这里演示第二种:
另开了一篇博客些创建,详见:
[IDEA]快速创建SpringBoot项目
这是加在springboot引导类上的注解
@SpringBootApplication
public class TestspringbootApplication {
public static void main(String[] args) {
SpringApplication.run(TestspringbootApplication.class, args);
}
}
观察加在这个注解上的注解
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
//略
}
可以把 @SpringBootApplication
看作是 @Configuration
、@EnableAutoConfiguration
、@ComponentScan
注解的集合。根据 SpringBoot官网,这三个注解的作用分别是
@EnableAutoConfiguration
:启用 SpringBoot 的自动配置机制@ComponentScan
: 扫描被@Component
(@Service
,@Controller
)注解的bean,注解默认会扫描该类所在的包下所有的类。@Configuration
:允许在上下文中注册额外的bean或导入其他配置类。即
@SpringBootApplication
就是几个重要的注解的组合,为什么要有它?当然是为了省事,避免了我们每次开发 Spring Boot 项目都要写一些必备的注解。
几分钟的时间,尝试实现一个Restful Web前后端分离项目,很简单,几分钟就搞完了!
[SpringBoot]实现前后端分离_RESTful Web实践
两个作用于 Servlet ,关于生命周期的注解
Servlet :
Servlet概念-原理-操作[Java-web]
被这两个注解修饰的方法可以保证在整个 Servlet 生命周期只被执行一次,即使 Web 容器在其内部中多次实例化该方法所在的 bean
@PostConstruct
:用来修饰方法,标记在项目启动的时候执行这个方法,一般用来执行某些初始化操作比如全局配置。PostConstruct
注解的方法会在构造函数之后执行,Servlet 的init()
方法之前执行。
@PreDestroy
: 当 bean 被 Web 容器管理的时候被调用,一般用来释放 bean 所持有的资源,@PreDestroy
注解的方法会在Servlet 的destroy()
方法之前执行。
被这个注解修饰的方法需要满足下面这些基本条件:
- 非静态
- 该方法必须没有任何参数,除非在拦截器的情况下,在这种情况下,它接受一个由拦截器规范定义的InvocationContext对象
- void()也就是没有返回值
- 该方法抛出未检查的异常
- …
演示:
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Configuration //此类将被容器管理成Bean
public class MyConfiguration {
public MyConfiguration() {
System.out.println("构造方法被调用");
}
//构造器之后被执行
@PostConstruct
private void init() {
System.out.println("PostConstruct注解方法被调用");
}
//bean死亡之前被执行
@PreDestroy
private void shutdown() {
System.out.println("PreDestroy注解方法被调用");
}
}
J2EE已在Java 9中弃用
@PostConstruct
和@PreDestroy
这两个注解 ,并计划在Java 11中将其删除。我们有什么更好的替代方法吗?当然有!如果在JAVA9之后使用这两个注解,请添加以下依赖
<dependency> <groupId>javax.annotationgroupId> <artifactId>javax.annotation-apiartifactId> <version>1.3.2version> dependency>
后端开发中热部署有很多方式,但是在开发 SpringBoot 项目有一种 Spring Boot 给我们提供好的很方便的一种方式,配置起来也很简单
热部署:我们修改程序代码后不需要重新启动程序,就可以获取到最新的代码,更新程序对外的行为。
热部署在我们日常开发可以为我们节省很多时间,通常我们在开发后端的过程中,当我们修改了后端代码之后都需要重启一下项目,这为我们浪费了时间,特别是在项目比较庞大,需要耗费大量时间的启动的时候。
热部署需要额外消耗你的计算机性能
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<scope>runtimescope>
<optional>trueoptional>
dependency>
首先在配置当前项目:
File==>settings==>compiler
ctrl + shift + alt + / ==>Register