• SpringBoot相关


    SpringBoot

    1. what

    springboot也是spring公司开发的一款框架。为了简化spring项目的初始化搭建的。

    spring项目搭建的缺点:

    1. 配置麻烦
    2. 依赖繁多
    3. tomcat启动慢

    2 .springboot的特点(why)

    • 自动配置

    springboot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是SpringBoot自动完成的

    • 起步依赖

    起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能

    简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。

    • 辅助功能

    提供了一些大型项目中常见的非功能性特性,如嵌入式服务器tomcat、安全、指标,健康检测、外部配置等。

    3. 搭建springboot的项目(how)

    在这里插入图片描述

    在这里插入图片描述

    4. springboot常用的配置文件种类

    springboot提供了两种配置文件。

    • 后缀为properties的文件
    • 后缀为yml的文件

    不管是哪种,它们的前缀都是application

    1. yaml文件格式

      冒号后面有空格,空格后面才是自己要填写的值

      server:
        port: 8080
        servlet:
          context-path: /aaa
      
    2. properties文件格式

      spring.application.name=demo2
      
      spring.profiles.active=test
      student.name=lay
      student.age=18
      student.sex=man
      

    如果上面两个文件同时存在,properties优先级高

    5. springboot中java如何读取配置文件中的内容【重点】

    我们习惯把一些自己的信息放入配置文件中,便于修改。比如OSS、支付等。我们还希望通过java代码能够读取到配置文件中自己的信息

    springboot提供了两种方式用于读取springboot配置文件中信息的方式

    • 使用@ConfigurationProperties注解

    使用在类上@ConfigurationProperties(prefix=“前缀”)

    可以读取任意类型

    在这里插入图片描述

    • Student类,将@ConfigurationProperties添加到实体类上
    @ConfigurationProperties(prefix = "student")
    @Component//为类创建spring,而且在创建时自动读取配置文件中前缀为student的属性
    @Data
    public class Student {
        //名称必须和配置文件中的名称一致
        private String name;
        private String age;
        private String sex;
    }
    
    • Controller类
    @RestController
    public class StudentController {
        @Autowired
        private Student student;
    
        @GetMapping("/info")
        public Student info(){
            return student;
        }
    }
    

    结果返回student中各个属性中的具体值

    在这里插入图片描述

    • 使用@Value注解

    它只能读取基本类型和字符串类型

    在这里插入图片描述

    • controller层,将@Value注解添加到具体属性上
    @RestController
    public class StudentController {
    
        @Value("${student.name}")
        private String xm;
        
        @GetMapping("/info")
        public String info(){
            return xm;
        }
    }
    

    结果仅返回student中的具体姓名

    在这里插入图片描述

    • @Component注解

      标注一个类为Spring容器的Bean,把普通pojo实例化到Spring容器中,相当于配置文件中的

    • @ConfigurationProperties注解

      允许开发者将外部的配置属性自动绑定到 JavaBean 对象上

    6. profile多环境配置【重点】

    我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都有修改配置文件,那么非常麻烦。profile功能就是来进行动态配置切换的

    1. profile配置方式
      • 多profile文件方式
      • yml多文档方式
    2. profile激活方式
      • 配置文件
      • 命令行参数

    我们需要针对不同的环境来创建不同的配置文件。使用profile来激活对应的配置文件

    比如:

    application-dev.properties  [开发环境的配置文件]
    application-test.properties [测试环境的配置文件]
    application-pro.properties [生产环境的配置文件]
    ------------------------------------------------
    相同配置依然还是放在application.properties中
    不同配置对应放置
    

    在这里插入图片描述

    如何激活对应的配置文件:两种方式

    • 在application配置文件中激活
    #激活对应环境的配置文件
    spring.profiles.active=pro
    
    • 部署时激活对应环境的配置
    命令行参数:java –jar xxx.jar --spring.profiles.active=dev
    

    7. springboot注册web组件

    web组件表示的就是servlet,filter过滤器组件

    回顾servlet组件步骤

    • 创建一个类并继承HttpServlet重写service方法
    • 注册到web.xml文件中
    • 创建一个类并继承HttpServlet重写service方法

      • 实例

        public class MyServlet extends HttpServlet {
        
            //重写父类中的方法.接受参数以及业务处理
            @Override
            public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
                System.out.println("代码~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
            }
        }
        

        在web.xml文件中注册该servlet,后续有简化方法,即在相应的类中添加注解

        @WebServlet注解

        参数:name:该servlet的name

        ​ urlPatterns:该servlet的路径

    • 在web.xml文件中注册servlet

      • 实例

        
            <servlet>
                
                <servlet-name>myServletservlet-name>
                
                <servlet-class>com.ykq.servlet.MyServletservlet-class>
            servlet>
        
            
            <servlet-mapping>
                
                <servlet-name>myServletservlet-name>
                
                <url-pattern>/myurl-pattern>
            servlet-mapping>
        

    思考:在springboot中没有web.xml文件,如何注册servlet?

    提供了一个配置类

    创建一个Servlet

    public class MyServlet extends HttpServlet {
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("~~~~~~~~~~~~~~~~");
        }
    }
    

    创建一个配置类

    @Configuration
    public class MyConfig {
        //注册servlet
        @Bean
        public ServletRegistrationBean myServlet(){
            ServletRegistrationBean bean=new ServletRegistrationBean<>();
            bean.setName("mys");
            bean.setServlet(new MyServlet());
            bean.addUrlMappings("/myServlet");
            return bean;
        }
    }
    

    回顾filter过滤器步骤

    1. 创建一个类并实现Filter接口,重写doFilter方法
    2. 注册到web.xml文件中
    • 创建一个类并实现Filter接口,重写方法
    public class MyFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            //初始化过滤器-只有一次
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            //过滤规则
            System.out.println("====过滤器====");
            //放行
            filterChain.doFilter(servletRequest,servletResponse);
            System.out.println("===过滤器放行了===");
        }
    
        @Override
        public void destroy() {
            //销毁过滤器-浏览器或服务器关闭时
        }
    }
    
    • 在web.xml文件中注册
    
        <filter>
            <filter-name>MyFilterfilter-name>
            <filter-class>com.ykq.filter.MyFilterfilter-class>
        filter>
        
        <filter-mapping>
            <filter-name>MyFilterfilter-name>
            
            <url-pattern>/*url-pattern>
        filter-mapping>
    

    spring如何注册filter,同注册servlet同理

    创建一个filter

    public class MyFilter implements Filter {
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            Filter.super.init(filterConfig);
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            System.out.println("经过了过滤器");
        }
    
        @Override
        public void destroy() {
            Filter.super.destroy();
        }
    }
    

    创建一个配置类

    @Configuration
    public class MyConfig {
        //注册过滤器
        @Bean
        public FilterRegistrationBean myFilter(){
            FilterRegistrationBean filter=new FilterRegistrationBean();
            filter.setName("my");
            filter.setFilter(new MyFilter());
            filter.addUrlPatterns("/bn");
            return filter;
        }
    }
    

    @Configuration注解

    是Spring的注解。

    作用:声明一个类为配置类,用于取代bean.xml配置文件注册bean对象

    用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

    8. springboot包扫描的原理

    ssm项目必须加包扫描,而现在springboot没有写包扫描了

    自动扫描主类所在的包

    因为自带了包扫描的功能,核心在主类的注解@SpringBootApplication上,它是一个复合注解

    里面包含@EnableAutoConfiguration开启自动配置

    上述注解里面包含注解@AutoConfigurationPackage

    上述注解里面包含注解@Import({AutoConfigurationPackages.Registrar.class}),需要导入一个自动配置包的类。加载主类所在的包,并按照该包进行扫描

    如果我们不想让它扫描主类所在的包,我们可以使用@ComponentScan(basePackages={“”}来指定自己的包

    在这里插入图片描述

    通过@ComponentScan注解指定扫描自己的包,默认的包扫描消失

    9. springboot的自动装配原理

    我们原来的ssm项目,都需要加载前端控制器DispatcherServlet,而现在的springboot并没有加载DispatcherServlet。springboot具备自动装配的功能

    springboot启动时,加载了使用@SpringBootApplication注解的类

    该注解是一个复合注解,包含了@EnableAutoConfiguration注解,该注解开启了自动装配功能,该注解也是一个复合注解。

    里面包含@Import({EnableAutoConfigurationImportSelector.class}),导入EnableAutoConfigurationImportSelector,该类自动装配选择器类,该类会自动加载很多自动装配。每个自动装配都会完成对应的自动装配功能。

    在这里插入图片描述

  • 相关阅读:
    电脑如何截屏?一起来揭晓答案!
    Arch Linux 安装简明流程
    Python处理刚刚,分钟,小时,天前等时间
    箱形理论在交易策略中的实战应用与优化
    11. 盛最多水的容器
    初识Golang的面向对象 为结构体(类)绑定方法
    Android开发_记事本(1)
    这几个数据分析项目,让我看到了什么才叫专业!!
    SpringBoot 使用与介绍
    [经典力扣面试题]135. 分发糖果
  • 原文地址:https://blog.csdn.net/qq_59099003/article/details/140362412