Springboot

Spring Boot能快速创建出生产级别的Spring应用,使spring开发变得简单,无需编写各种配置。

Spring Boot是整合Spring技术栈的一站式框架。

Spring Boot是简化Spring技术栈的快速开发脚手架。

Spring Boot优点:

创建独立的Spring应用内嵌web服务器自动stater依赖,简化构建配置自动配置Spring以及第三方功能提供生产级别的监控,健康检测以及外部化配置无代码生成,无需编写XML。

Spring Boot缺点:

人称版本帝,迭代快,需要时刻注意变化封装太深,内部原理复杂,不容易精通。

创建Spring Boot项目

1.快速新建Spring Boot,注意联网

2.创建maven项目,在pom中导入一个父工程

 SpringBoot要集成SpringMvc进行Controller的开发, 所以项目要导入web的启动依赖

 接下来编写一个启动类,在类上标注注解SpringBootApplication,启动类默认扫描配置类的包底下的子包及其所有类

package com.springboot;

import com.springboot.config.MyConfig;
import com.springboot.domain.cat;
import com.springboot.domain.pepole;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
//这是一个Spring Boot应用
public class MySpringBootApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(MySpringBootApplication.class, args);

    }
}

在controller中,如果想让当前方法返回字符串,不再拼接视图,需要在方法上添加注解@ResponseBody。

如果想让当前controller中所有方法均返回字符串,那么在controller上的注解就可以是@RestController,不再是@Controller

简化配置

Spring Boot把所有配置都固定在application.properties里,文件名是固定写法(后缀properties,yml,yaml)。

在修改配置之前的运行信息

可以看到端口号为8080,项目名为''。

 创建application.yml,规定端口号为9999,项目名为sboot(需要注意项目名前一定要加上"/"不然会报错)

 修改后运行消息

 可以看到端口号更改为9999,项目名也更改了。

打包

当前项目还没有打包方式,默认为jar包,创建一个可执行的jar包,只要引入了 Spring Boot 的 maven 插件,就可以将项目自动打包成一个可执行的 jar 包

<!-- 打包插件 -->
<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
  </plugins>
</build>

点击右侧 maven,将我们的项目 clean、package 运行一下

 进入jar包目录打开cmd,在此目录下输入java -jar xxxxxx.jar运行jar包。

父项目做依赖管理

每个Spring Boot应用都有一个父工程,子项目会继承父项目中的依赖,子项目在使用父项目中的依赖时,就不用指定版本号了。如果想用插件的某些版本也是可以指定的。

开发导入stater场景启动器

在项目中,无需关注各种依赖,只需要导入一个场景启动器(一组依赖的集合描述)即可。

自动配置特性

自动配置好了tomcat,SpringMvc

当我们引入了 web 包后,我们的 tomcat 场景启动器,webmvc 就被 引入了,我们开发 web 的所有 jar 包就被引入了。

自动配置好了web功能,例如字符编码

包结构

只要是主程序所在包及其子包都可以被扫描到。如果无需包结构配置,那么可以在启动类上添加注解@ComponentScans("com.spb")或者@ComponentScans(@ComponentScan("com.spb")),这样会扫描spb包下所有类。注意:添加的扫描包不能为与启动类同级,与@SpringBootApplication冲突

按需加载所有自动配置项

只有导入当前场景的启动器,当前场景的自动配置 类才会生效 这就是按需加载我们所用到的场景下的所有依赖

底层注解

Spring Boot可以编写配置类来添加组件,这个类就等同于xml配置文件

//告诉Spring Boot这是一个配置类
@configuration
public class MyConfig {

   /**
   Bean的作用就是给容器中添加组件,
   以方法名作为组件id,也可以在Bean中自定义id
   返回值类型就是组件类型,
   返回值就是在容器中保存的实例 
   */
    @Bean
    public cat cat() {
        cat cat = new cat("猫", "吃", moues());
        return cat;
    }

    @Bean
    public moues moues() {
        moues moues = new moues("老鼠");
        return moues;
    }

}

Spring Boot基于5.2以后,多了一个属性proxyBeanMethods默认为true,直译就是代理bean的方法

Spring Boot 在底层 @Configuration 的两个配置

Full(全配置):proxyBeanMethods = true * 容器中会保存一个配置类的代理对象,每次调用配置类方法,都会去容器中来获取我们具体的 * 组件对象 *

Lite(轻量级配置):proxyBeanMethods = false * 容器中不会保存配置类的代理对象,每次调用配置类方法,都会重新创建一个新的对象。

需要注意的是当两个类中有引用关系时,必须为单例

springboot轻量级优点:会跳过检查容器中有没有该组件,加快项目运行速度 * 如果是全模式,外部调用方法,springboot都会来检查容器中的对象,消耗项目运行时间

除了编写配置类来注册组件,还可以使用原先的注解,将组件注册到IOC中,比如:@Compontent、@controller、@Service、@Repository 

此外还有一种给容器添加组件@Import

@Import注解需要添加到容器中的组件的类上,比如Controller,Service,Repository,Component,Configuration,还有主配置类等

它有一个 value 属性,值为数组,也就是说我们可以导入非常多的组件,只要我们将这些组件放到数组 中就可以

 条件装配-@Conditional

@ConditionalOnBean(name = "moues")如果容器中由moues组件则进行注入该组件@ConditionalOnMissingBean(name = "weicunzai")不存在该组件进行注入

解析顺序

在 spring ioc 的过程中,优先解析 @Component,@Service,@Controller 注解的类。其次解析配置 类,也就是 @Configuration 标注的类。最后开始解析配置类中定义的 bean 。

导入自定义配置文件中的资源-@ImportResource

项目中自定义的配置文件(beans.xml)中定义组件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--普通方式注入容器,直接写不会扫描-->
    <bean id="cattt" class="com.springboot.domain.cat">
        <property name="name" value="小猫"/>
        <property name="eat" value="吃"/>
        <property name="moues" ref="moues"/>
    </bean>
</beans>

让该xml生效需要在配置类上添加注解@ImportResource("classpath:xxxx.xml"),这样容器中就有了该xml文件中的bean

绑定配置-@ConfigurationProperties

在项目中将经常变化的东西编写到配置文件中,例如数据库信息。那么将配置文件中的数据信息封装到实体对象中,就只需要在类中添加一个注解@ConfigurationProperties

配置文件中声明属性

 那么对应的实体类就必须注册到容器中,并且实体类属性名和配置文件中属性名必须一致

package com.springboot.domain;

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "peo")
public class pepole {

    private String name;

    private String addres;

    public pepole() {
    }

    public pepole(String name, String addres) {
        this.name = name;
        this.addres = addres;

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddres() {
        return addres;
    }

    public void setAddres(String addres) {
        this.addres = addres;
    }

    @Override
    public String toString() {
        return "pepole{" +
                "name='" + name + '\'' +
                ", addres='" + addres + '\'' +
                '}';
    }
}

此外还有一种方式可以使配置文件中属性绑定到实体类中@EnableConfigurationProperties(xxx.class)

首先将实体类从组件中移除,并在配置类上方开启实体类的配置绑定功能

 @Order

简单实践

Lombok

在之前的开发中,实体类中的属性封装后,必须向外界提供setter/getter方法,有参,无参构造等,但Lombok就大大简化了这些写法

在项目中引入lombok依赖

<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>

只是引入依赖还不够,需要在插件市场下载插件

file->settings->plugins,然后搜索Lombok

那么实体类就只需要添加注解

@Data就有了setter/getter方法

@ToString会在编译时生成toString方法

@AllArgsConstructor全参构造

@NoArgsConstructor无参构造

@EqualsAndHashCode重写equals和hashCode方法

@Slf4j打印日志,它会自动为当前类注入一个log属性,在方法中使用log.info("xxxxxxx");

热部署

在每次修改完页面或者java代码,都需要关掉项目,重启进行测试,较为麻烦。devtools使得不用重启就可以更新代码进行测试

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

在编写新的代码后ctrl+f9重新编译即可

配置文件用法

基本用法

key: value;kv之间有空格

大小写敏感 使用缩进表示层级关系

缩进不允许使用 tab,只允许空格

相同层级的元素左对齐即可

'#' 表示注释

数据类型

单个的date、boolean、string、number、null

k: v

对象:键值对的集合map、hash、set、object

#行内写法

k: {k1:v1,k2:v2,k3,v3}

#多行写法

k:

  k1: v1

  k2: v2

  k3: v3

数组:一组按次序排列的值array、list、queue

#行内写法

k: [v1,v2,v3]

#多行写法

k:

  -v1

  -v2

  -v3

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值