栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot HelloWorld

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot HelloWorld

初识SpringBoot

1、SpringBoot特点 1.1、依赖管理
  • 父项目做依赖管理

    依赖管理
    	
            spring-boot-starter-parent
            org.springframework.boot
            2.5.5
        
    他的父项目:
    	
        	org.springframework.boot
        	spring-boot-dependencies
        	2.5.5
      	
    几乎声明了所有开发中常用的依赖的版本号
    
  • 开发导入starter场景启动器

    spring-boot-starter-web
    
    1、spring-boot-starter :springBoot场景启动器;帮我们导入了web模块正常运行所依赖的组件;
    
    2、SpringBoot将所有的功能场景都抽取出来,做成一个个的starters(启动器) ,只需要在项目里面引入这些starters相关场景的所有依赖都会导入进来。要用什么就导入什么场景的启动器。
    
    3、所有的场景启动器模块最底层的依赖:
            
              org.springframework.boot
              spring-boot-starter
              2.5.5
              compile
            
    

    4、SpringBoot所有支持的场景:

    https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters

  • 无需关注版本号,自动版本仲裁

    • 引入的非本仲裁的jar,要写版本号
  • 可以修改版本号

1、查看spring-boot-dependencies里面规定当前依赖的版本用的key
2、在当前项目里面重写配置

    
        5.1.43
    
1.2、自动配置
  • 自动配置好Tomcat

    • 引入Tomcat依赖
    • 配置Tomcat
  • 自动配置好SpringMVC

    • 引入SpringMVC的全套组件
    • 自动配置好SpringMVC常用组件
  • 自动配置好Web常见的功能,如:字符编码问题

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

    • 主程序所在的包及其所有子包里面的组件都会被默认扫描进来

    • 无需以前的包扫描配置

    • 想要改变扫描路径:@SpringBootApplication(scanbasePackages = “com”)

    • 或者 @ComponentScan指定扫描路径

      一个@SpringBootApplication
          等同于
      		@SpringBootConfiguration
      		@EnableAutoConfiguration
      		@ComponentScan("com")
      
  • 各种配置拥有默认值

  • 按需要加载所有自动配置项

    • 虽然场景的所有自动配置启动的时候默认会全部
    • 按照条件装配规则,最终会按需配置
环境准备 1、MAVEN设置 2、DEA设置 Springboot: HelloWorld 1、创建maven项目 2、添加SpringBoot相关的依赖
    //继承父类依赖
    
        spring-boot-starter-parent
        org.springframework.boot
        2.5.5
    
    
    //导入web模块依赖
    
        
            org.springframework.boot
            spring-boot-starter-web
         
    
3、创建主程序:启动Spring boot应用
@SpringBootApplication       //标注这是一个主程序,说明这是一个springboot应用
public class HelloWorldApplication {    
    
    public static void main(String[] args) {    
        //Spring应用启动起来    
        SpringApplication.run(HelloWorldApplication.class,args);    
    }
    
}

4、编写相关的Controller、Service
@Controller
public class HelloController {

    @ResponseBody
    @RequestMapping("/hello")
    public String hello(){
          return "helloWorld";
    }

}

5、运行主程序测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jeIX72tU-1635054821089)(C:UsersXiaoQiangAppDataRoamingTyporatypora-user-images1634627459631.png)]

6、简化部署
    
         
             
                 org.springframework.boot
                 spring-boot-maven-plugin
             
         
    

将这个应用打包成jar包,直接使用java -jar的命令进行执行;

Hello World探究
### 1.POM文件

		#### 1、父项目
我们引入的父项目    
	
        spring-boot-starter-parent
        org.springframework.boot
        2.5.5
    
他的父项目是:
	
    	org.springframework.boot
    	spring-boot-dependencies
    	2.5.5
  	
他是真正管理Spring Boot应用里面的所有依赖版本号:
	

Spring Boot的版本仲裁中心:

​ 以后我们导入依赖默认是不需要写版本号的:

​ 注意:(没有在dependencies里面管理的依赖还是需要声明版本号的)

2、导入的依赖
        
            org.springframework.boot
            spring-boot-starter-web
        

spring-boot-starter-web它的里面还是引用了:

        
          org.springframework.boot
          spring-boot-starter
          2.5.5
          compile
        

spring-boot-starter-web

​ spring-boot-starter :springBoot场景启动器;帮我们导入了web模块正常运行所依赖的组件;

​ SpringBoot将所有的功能场景都抽取出来,做成一个个的starters(启动器) ,只需要在项目里面引入这些starters相关场景的所有依赖都会导入进来。要用什么就导入什么场景的启动器。

3、底层注解 1、如何给容器里面添加组件 1.1@Configuration

​ 告诉SpringBoot这是一个 配置类 == 配置文件

​ 但是配置类本身也是组件

​ 注意:但是在配置类,我们不能写标签了,要写方法

@Configuration   将类标记为适合 Spring 驱动的配置类似于我们的bean文件
public class MyClass {  
    
	//@Bean给容器中添加组件,以方法名作为主键的id,返回类型就是组件类型,返回的值,就是组件在容器中的实例
    @Bean
    public Pet pet(){
        return new Pet();
    }
    
    @Bean("tow")   //指定id名  
    public Pet pet01(){
        return new Pet("张三",50);
    }
    
}
  • @Bean相当于是我们以前的Spring配置文件一样注册使用

          
              
              
          
    

    操作容器组件

    //接收所有组件的容器
    ConfigurableApplicationContext run1 = SpringApplication.run(HelloWorldApplication.class, args);
    
    //通过这个容器获取bean组件,和spring的xml文件操作一样
    run1.getBean("pet01");
    
  • 配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的

            Pet pet1 = (Pet) run.getBean("pet01");
            Pet pet2 = (Pet) run.getBean("pet01");
            System.out.println(pet1 == pet2);
            System.out.println(pet1.hashCode());
            System.out.println(pet2.hashCode());
    
    结果:	true
    	  1301987508
    	  1301987508
    

    不生成代理对象

    @Configuration(proxyBeanMethods = false) 
    
1.2 @import({})

给容器中自动创建出这个类型的组件,默认组件的名称就是全类名

@import(User.class) 1标记


		//获取所有Pet类型的bean
        String[] beanNamesForType = run.getBeanNamesForType(Pet.class);
        for (String s : beanNamesForType) {
            System.out.println(s);
        }

        User bean = run.getBean(User.class); 1标记
        System.out.println(bean);

结果:pet01
	 namePet02
	com.yang.controller.User@517566b
2、注解-条件装配 1、@Conditional

​ 条件装配:满足Conditional指定的条件,则进行组件注入

3、注解-原生配置文件引入 @importResource
 @importResource("classpath:beans.xml")
4、配置绑定 1、@ConfigurationProperties

方式一:@Component + @ConfigurationProperties

@Component   //只有在容器中的组件,才会拥有SpringBoot提供的强大功能
@ConfigurationProperties(prefix = "mycar")
public class Car {
    
}

方式二:@Component + @EnableConfigurationProperties

// 1.开启Car 配置绑定功能
// 2.把这个Car这个组件自动注入到容器中
@EnableConfigurationProperties(Car.class)
2、主程序类,主入口类
@SpringBootApplication       //标注这是一个主程序,说明这是一个springboot应用
public class HelloWorldApplication {

    public static void main(String[] args) {
        //Spring应用启动起来
        SpringApplication.run(HelloWorldApplication.class,args);
    }

}

@SpringBootApplication : springboot应用,标注在某个类上,说明这个类就是Springboot主配置类,

那springboot就应该运行这个类的main方法来启动Springboot应用;

@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}
)}
)

@SpringBootConfiguration:Springboot的配置类

​ 标注在某个类上,表示这是一个SpringBoot的配置类

​ @Configuration: 配置类上来标注这个注解;

​ 配置类 — 配置文件 ;配置类也是容器中的一个组件;@Component

@EnableAutoConfiguration: 开启自动配置功能

​ 以前我们需要配置的东西,SpringBoot帮我们自动装配;@EnableAutoConfiguration告诉Springboot开启自动装配功能,这样自动配置才能生效;

@AutoConfigurationPackage
@import({AutoConfigurationimportSelector.class})
public @interface EnableAutoConfiguration {

​ @AutoConfigurationPackage:自动配置包

​ @import({Registrar.class})

​ Spring的底层注解@import,给容器中导入一个组件;导入的组件由Registrar.class来导入

​ @import({AutoConfigurationimportSelector.class}):给容器中导入组件

​ AutoConfigurationimportSelector

​ 将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;

自动配置原理

//标注这是一个主程序,说明这是一个springboot应用

@SpringBootApplication
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {}
1、@SpringBootConfiguration

@Configuration。代表当前是个配置类

2、@ComponentScan

指定来定义要扫描的特定包,如果没有定义特定的包,将从声明该注解的类的包开始扫描。

3、@EnableAutoConfiguration
@AutoConfigurationPackage
@import(AutoConfigurationimportSelector.class)
public @interface EnableAutoConfiguration {}

1、@AutoConfigurationPackage

自动配置包?,指定了默认的包规则

@import(AutoConfigurationPackages.Registrar.class)   //给容器中导入一个组件
public @interface AutoConfigurationPackage {}

//利用Registrar给容器中导入一系列组件
//将指定的一个包下的所有组件导入进来。HelloWorldApplication所在的包下。

2、@import(AutoConfigurationimportSelector.class)

最终就是到这个文件,给容器中加载所有的配置类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0XErD1cf-1635054821090)(C:UsersXiaoQiangAppDataRoamingTyporatypora-user-images1635048457660.png)]

ava
@AutoConfigurationPackage
@import(AutoConfigurationimportSelector.class)
public @interface EnableAutoConfiguration {}

**1、@AutoConfigurationPackage**

自动配置包?,指定了默认的包规则

```java
@import(AutoConfigurationPackages.Registrar.class)   //给容器中导入一个组件
public @interface AutoConfigurationPackage {}

//利用Registrar给容器中导入一系列组件
//将指定的一个包下的所有组件导入进来。HelloWorldApplication所在的包下。

2、@import(AutoConfigurationimportSelector.class)

最终就是到这个文件,给容器中加载所有的配置类

[外链图片转存中…(img-0XErD1cf-1635054821090)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-isvMDoco-1635054821091)(C:UsersXiaoQiangAppDataRoamingTyporatypora-user-images1635048467594.png)]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/346328.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号