springboot2(未完成)

2024-01-03 01:10:50

一、springboot核心技术—基础入门

尚硅谷的教程有点不适合初学SpringBoot我,等后面SpringBoot用熟了再来看,留个未完成笔记

1、前期准备

JDK 8 ,maven3.3+

2、springboot

2.1、作用

  • 更简单的创建出一个生产级别的应用

2.2、优点

  • 创建独立的spring应用
  • 内嵌web服务器,不用额外安装tomcat
  • 自动starter依赖,简化构建配置。不用导入很多的jar依赖。
  • 自动配置spring以及第三方功能
  • 提供生产级别的监控,健康检查及外部化配置
  • 无代码生成,无需编写xml

springboot是简化spring快速开发的脚手架

2.3、缺点

  • 封装很深,内部原理复杂,不容易精通

3、快速入门

3.1、创建maven工程

3.2、引入springboot依赖

  • <!--           springboot的依赖-->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.3.4.RELEASE</version>
        </parent>
        <dependencies>
    <!--        springboot的web依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
    

3.3、创建主程序类

  • /**
     * 主程序类
     * @SpringBootApplication:这是一个springboot应用
     */
    @SpringBootApplication
    public class MainApplication {
        public static void main(String[] args) {
            SpringApplication.run(MainApplication.class,args);
        }
    }
    

3.4、编写业务

  • //@Controller
    //@ResponseBody
    @RestController
    public class HelloController {
    
        @RequestMapping("/hello")
        public String helloTest01(){
            return "hello springboot";
        }
    }
    

3.5、运行

  • 直接运行main函数即可

3.6、简化配置

  • 统一配置–>application.properties,springboot官网的Application Properties中有介绍

  • #修改服务器端口
    server.port=8888
    
  • image-20240101160245735

3.7、简化部署

  • <!--    打jar包-->
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    • 打成的jar包可以直接使用

    • java -jar springboot2-1.0-SNAPSHOT.jar

      image-20240101161413327

4、自动配置的原理

4.1、依赖管理

  • <!--springboot的依赖-->
        <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>
    
  • image-20240101163211436

  • 修改仲裁版本号

    • <!--1、查看spring-boot-dependencies里面规定当前的版本用的 key-->
      <!--2、在当前项目中进行重写-->
          <properties>
              <mysql.version>8.0.33</mysql.version>
          </properties>
      
  • 开发导入starter场景启动器

    • 1、见到很多 spring-boot-starter-* : *就某种场景
      2、只要引入starter,这个场景的所有常规需要的依赖我们都自动引入
      3、SpringBoot所有支持的场景
      https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter
      4、见到的  *-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。
      5、所有场景启动器最底层的依赖:spring-boot-starter
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>2.3.4.RELEASE</version>
        <scope>compile</scope>
      </dependency>
      
    • 1、引入依赖默认都可以不写版本,自动仲裁版本号

    • 2、引入非版本仲裁的jar,要写版本号。

4.2、自动配置

  • 1、自动配置了tomcat

    • 在 spring-boot-starter-web 中引入了依赖

    • 配置tomcat

    • <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <version>2.3.4.RELEASE</version>
            <scope>compile</scope>
      </dependency>
      
  • 2、自配置好了springmvc

    • 引入SpringMVC全套组件
    • 自动配好SpringMVC常用组件(功能)
  • 3、自动配置好web开发的常用功能:如字符编码问题,文件上传解析器

    • SpringBoot帮我们配置好了所有web开发的常见场景
  • 4、默认包结构

    • image-20240101201249260

    • 主程序所在的包以及下面的所有子包里面的组件都会默认扫描出来

    • 想要改变扫描路径,@SpringBootApplication(scanBasePackages=“xyz.zzj”) 或者@ComponentScan 指定扫描路径

    • - @SpringBootApplication
      - 等同于
        - @SpringBootConfiguration
        - @EnableAutoConfiguration
        - @ComponentScan("com.atguigu.boot")
      
  • 5、各种配置拥有默认值

    • 默认配置最终都是映射到某个类上,如:MultipartProperties

    • 配置文件的值最终会绑定每个类上,这个类会在容器中创建对象

  • 6、按需加载配置

    • 非常多的starter
    • 引入了哪些场景这个场景的自动配置才会开启
    • SpringBoot所有的自动配置功能都在 spring-boot-autoconfigure 包里面

5、容器功能

5.1、组件添加

1、@Configuration
  • @Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类
    public class MyConfig {
    
        /**
         * 外部无论对配置类中的这个组件注册方法调用多少次都是之前注册容器中的单实例对象
         * @return
         */
        @Bean //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
        public User user01(){
            return new User("zzj",18);
        }
    
        @Bean
        public Pet pet01(){
            return new Pet("zzj");
        }
    }
    
    
  • –用@bean配置的组件也是 单例 的

    –配置类本身也是组件

    –proxyBeanMethods:代理bean方法

    ? Full(proxyBeanMethods = true):保证每个@Bean方法被调用多少次返回的组件都是单实例的

    ? Lite(proxyBeanMethods = false):每个@Bean方法被调用多少次返回的组件都是新创建的

    ? 组件依赖必须使用Full模式默认。其他默认是否Lite模式

    所以配置中:类组件之间没有依赖关系就用lite,启动快,不用检查,也就是为proxyBeanMethods = false

    ? 类组件之间有依赖关系时必须使用full,方法调用时会得到之前的单实例组件proxyBeanMethods = true

2、@Bean、@Component、@Controller、@Service、@Repository、@ComponentScan
  • 这些组件在spring中已经学过了
3、@Import
  • import导入的组件名字是:全类名

  • @Import({User.class, DBHelper.class})
    
4、@Conditional
  • 条件装配:满足Conditional指定的条件,则进行组件注入

  • image.png

  • @ConditionalOnBean

    • 当user组件依赖于tom组件,但是tom组件并没有被注册,就是一个普通的类时,则user组件也不会被注册

    •     @ConditionalOnBean(name="tom")
          @Bean //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
          public User user01(){
              return new User("zzj",18);
          }
      
          //@Bean("tom")
          public Pet pet01(){
              return new Pet("zzj");
          }
      

6、原生配置文件引入

1、@ImportResource
  • @ImportResource("classpath:beans.xml")  //导入xml文件配置文件
        @Bean 
        public User user01(){
            return new User("zzj",18);
        }
    

7、配置绑定

  • 如何使用Java读取到properties文件中的内容,并且把它封装到JavaBean中,以供随时使用;

    • public class getProperties {
           public static void main(String[] args) throws FileNotFoundException, IOException {
               Properties pps = new Properties();
               pps.load(new FileInputStream("a.properties"));
               Enumeration enum1 = pps.propertyNames();//得到配置文件的名字
               while(enum1.hasMoreElements()) {
                   String strKey = (String) enum1.nextElement();
                   String strValue = pps.getProperty(strKey);
                   System.out.println(strKey + "=" + strValue);
                   //封装到JavaBean。
               }
           }
       }
      
1、@ConfigurationProperties
  • 在SpringBoot里面可以使用@ConfigurationProperties注解来绑定properties文件里的值

  • @Component
    @ConfigurationProperties(prefix = "mycar")
    public class Car {
        private String name;
        private String bland;
    
        public Car() {
        }
    
  • mycar.name=byd
    mycar.bland=1001
    
  • 自动装配个Car 组件时,能直接读取properties文件里的值

    •     @Autowired
          Car car;
      
          @RequestMapping("/car")
          public Car Car(){
              return car;
          }
      
2、@EnableConfigurationProperties + @ConfigurationProperties
  • 使用这两个注解时就不用写@Component

  • 可以直接在配置类里面配置

  • @Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类
    @EnableConfigurationProperties(Car.class)
    //开启Car的配置绑定
    //把Car这个组件自动配置到容器里
    public class MyConfig {
    

8、自动配置原理

文章来源:https://blog.csdn.net/weixin_51713937/article/details/135351936
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。