【SpringBoot】基础入门

🍿*★,°*:.☆( ̄▽ ̄)/$:*.°★* 🍿

       🍟欢迎来到老胡的博文,本文主要讲解的是SpringBoot的基础知识,通过这篇博文,希望你有所收益!🍟


🍕我是老胡,一个正在为秋招准备的学弟🍕
🥞喜欢的朋友可以关注一下,下次更新不迷路🥞

初识SpringBoot

​ SpringBoot底层是Spring Framework,SpringBoot是整合Spring技术栈的一站式框架,是简化技术栈的快速开发脚手架.

SpringBoot优点:

创建独立的Spring应用

自动starter依赖,简化构建依赖

内嵌web服务器

自动配置Spring以及第三方功能

提供生产级别的监控,健康检查以及外部化配置

无代码生成,无需编写xml

SpringBoot缺点

版本迭代快

封装太深,内部原理复杂,不容易精通.

helloworld

导入依赖

	<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

主程序

package com.h.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * @Author 
 * @Date 2022/4/11 15:59 
 * @Version 1.8 (版本号)
 */
//告诉springboot这是一个springboot应用
//标注SpringBootApplication的是主程序类,是启动的入口
@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class,args);
    }
}

业务逻辑层

package com.h.boot.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * @Author 
 * @Date 2022/4/11 16:05 
 * @Version 1.8 (版本号)
 */
//相当于@ResponseBody和@Controller
@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String handel1(){
        return "helloworld";
    }
}

简化配置

创建一个配置文件直接在文件中修改配置即可.

简化部署

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

把项目打成jar包,直接在目标服务器执行即可

依赖管理

引入依赖:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
</parent>

引入依赖的父项目

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.3.4.RELEASE</version>
</parent>

在他的父项目中,几乎声明了开发中常用的版本号

自动仲裁

引入的依赖可以不关注 版本号(前提是springboot依赖的父项目中存在该依赖)

如果不存在,则需要写版本号.

场景启动器

spring-boot-starter-* , *就某种场景,且场景需要我们自动引入.

场景启动器最底层依赖

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <version>2.3.4.RELEASE</version>
      <scope>compile</scope>
</dependency>

自动配置

​ 通过引入spring-boot-starter-parent,自动引入Tomcat依赖,并配置好了Tomcat,自动引入SpringMVC全套组件并配置好了常用组件

​ SpringBoot帮我们配置好了所有web开发的常见场景,主程序所在的包和子包都会被默认扫描,不需要配置之前的包扫描,引入了的场景自动配置才会开启

​ 默认配置最终都是映射到某一个类上,配置文件的值会绑定上某个类上,这个类会在容器中创建对象并按照需求加载所有的自动配置项.

容器功能

组件添加

只有容器中的组件,才可以拥有SpringBoot提供的强大功能

方式一

@Configuration基本使用

package com.h.boot.config;
import com.h.boot.bean.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @Author
 * @Date 2022/4/11 18:39
 * @Version 1.8 (版本号)
 */
//    告诉springBoot这是一个配置类
//    配置类本身也是一个组件
//    proxyBeanMethods:代理bean的方法
//		这两个模式SpringBoot2新增的
//    Full(proxyBeanMethods = true)模式保证每个@Bean方法被调用多次返回的组件都是单实例
//    Lite(proxyBeanMethods = false)模式保证调用多少次返回的组件都是新创建的
//     组件依赖必须使用Full模式默认。其他默认是否Lite模式
@Configuration(proxyBeanMethods = false)
public class MyConfig {
//    给容器添加组件,以方法名作为组件的id,返回类型作为组件类型,返回的值就是组件在容器中的实列
//    默认单实例
    @Bean
    public User user1(){
        return new User(12,"tom");
    }
}

主程序类测试

package com.h.boot;
import com.h.boot.bean.User;
import com.h.boot.config.MyConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
/**
 * @Author 胡俊伟
 * @Date 2022/4/11 15:59 (可以根据需要修改)
 * @Version 1.8 (版本号)
 */
//    告诉springboot这是一个springboot应用
//    标注SpringBootApplication的是主程序类,是启动的入口
@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
//        返回我们IOC容器
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
//        返回容器组件
        String[] names = run.getBeanDefinitionNames();
//        查看容器里面的组件
        for (String name:names){
            System.out.println(name);
        }
        //    从容器中获取组件
        User user = run.getBean("user1",User.class);
        User user1 = run.getBean("user1",User.class);
        System.out.println(user==user1);
        MyConfig bean = run.getBean(MyConfig.class);
        System.out.println(bean);
    }
}

方式二

使用之前的@Bean @Component @Controller Service @Repository

方式三

@ComponentScan和@Import

//    import 将对应组件导入进去,可以自动的给容器中创建出类型组件
@Import({User.class})

方式四

@Conditional

条件装配,满足条件注入

@ConditionalOnBean(name = "user")
@ConditionalOnMissingBean(name = "tom")

原生配置文件引入

@ImportResource

允许我们用之前的原生文件

@ImportResource("classpath:beans.xml")

配置绑定

使用java读取配置文件properties中的内容,并将他封装到javaBean中

方式一

@ConfigurationProperties

@ConfigurationProperties(prefix = "user")

方式二

@Component + @ConfigurationProperties

//标注一个类为Spring容器的Bean
@Component
//开启属性配置功能,将组件自动注入容器中
@ConfigurationProperties(User.class)

自动配置原理

加载自动配置类

@SpringBootApplication

等价于

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan

@SpringBootConfiguration

代表当前类是一个配置类

@EnableAutoConfiguration

等价于

@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)

@AutoConfigurationPackage

自动配置,给容器中导入一系列组件

将MainApplication所在包下的所有组件扫描进来

@Import(AutoConfigurationImportSelector.class)

1、利用getAutoConfigurationEntry(annotationMetadata);给容器中批量导入一些组件
2、调用List configurations = getCandidateConfigurations(annotationMetadata, attributes)获取到所有需要导入到容器中的配置类
3、利用工厂加载 Map<String, List> loadSpringFactories(@Nullable ClassLoader classLoader);得到所有的组件
4、从META-INF/spring.factories位置来加载一个文件。
默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件
spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META- INF/spring.factories

@ComponentScan

指定要扫描的内容

补充:SpringBoot加载所有的自动配置类

按需求开启自动配置项

虽然127场景自动配置,启动时默认全部加载,但是使用的时候按照需求开启自动配置项.

每个自动配置类按照条件进行生效,默认绑定配置文件给定的值

生效的配置类就会给容器中装配组件

修改配置类

@Bean
@ConditionalOnBean(MultipartResolver.class)  //容器中有这个类型组件
@ConditionalOnMissingBean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME) //容器中没有这个名字 multipartResolver 的组件
public MultipartResolver multipartResolver(MultipartResolver resolver) {
      //给@Bean标注的方法传入了对象参数,这个参数的值就会从容器中找。
      //SpringMVC multipartResolver。防止有些用户配置的文件上传解析器不符合规范
	// Detect if the user has created a MultipartResolver but named it incorrectly
	return resolver;
}

给容器中加入了文件上传解析器;

SpringBoot默认开启所有组件,但是用户配置的优先

@Bean
	@ConditionalOnMissingBean
	public CharacterEncodingFilter characterEncodingFilter() {    }

只要用户有自己配置的,用户优先

用户直接自己@Bean替换底层的组件

用户去看这个组件是获取的配置文件什么值就去修改。

查看自动配置了哪些:

配置文件中debug=true开启自动配置报告。Negative(不生效)或Positive(生效)

开发技巧

Lombok

简化JavaBean开发(2021的idea自带,之前版本需要安装lombok插件)

//引入插件
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
@Data
@ToString
//全参构造器
@AllArgsConstructor
//无参构造器
@NoArgsConstructor
//重写equals和hashcode
@EqualsAndHashCode
//注入日志功能
@Log4j

dev-tools

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

热更新(ctrl+F9)

Spring Initailizr

项目初始化向导

创建项目时勾选后会创建号对应的项目结构,引入相应依赖

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值