[持续更新]关于SpringBoot学习路线及以及一些总结

[持续更新]关于SpringBoot学习路线及以及一些总结

springboot的学习策略:

以项目为驱动

WHAT IS SPRING BOOT

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配置

你的第一个SpringBoot项目_HelloWorld

方式一:你可以通过 https://start.spring.io/ 官网指引来快速生成一个 Spring Boot 的项目

方式二:通过IDEA的SpringBoot脚手架快速创建Springboot项目

这里演示第二种:

另开了一篇博客些创建,详见:

[IDEA]快速创建SpringBoot项目

关于@SpringBootApplication

这是加在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 项目都要写一些必备的注解。

你的第二个SpringBoot项目_Restful Web

几分钟的时间,尝试实现一个Restful Web前后端分离项目,很简单,几分钟就搞完了!

[SpringBoot]实现前后端分离_RESTful Web实践

@PostConstruct与@PreDestroy

两个作用于 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.annotation</groupId>
 <artifactId>javax.annotation-api</artifactId>
 <version>1.3.2</version>
</dependency>

热部署

后端开发中热部署有很多方式,但是在开发 SpringBoot 项目有一种 Spring Boot 给我们提供好的很方便的一种方式,配置起来也很简单

热部署:我们修改程序代码后不需要重新启动程序,就可以获取到最新的代码,更新程序对外的行为。

热部署在我们日常开发可以为我们节省很多时间,通常我们在开发后端的过程中,当我们修改了后端代码之后都需要重启一下项目,这为我们浪费了时间,特别是在项目比较庞大,需要耗费大量时间的启动的时候。

热部署需要额外消耗你的计算机性能

	<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
     		 <scope>runtime</scope>
			<optional>true</optional>
	</dependency>

首先在配置当前项目:

File==>settings==>compiler

ctrl + shift + alt + / ==>Register

原创文章 197 获赞 142 访问量 6万+

猜你喜欢

转载自blog.csdn.net/JunSIrhl/article/details/105758869