1.关于springboot
1.1 spring和springboot
spring生态包含很多开源框架,如spring,springboot,springcloud,springData
springboot就是集成其他spring系列的框架,让他们之间协同工作更简单,配置更方便。
1.2 springboot的优点:
1. 创建独立Spring应用,(springboot是更高级的框架,底层为spring,spring底层为jdk)
2. 内嵌web服务器,(不用把项目打包成war,发布到如tomcat服务器上)
3. 自动配置Spring以及第三方功能(如开发web程序,只需要导入web包就能自动配置开发web对应的依赖,且自动协调它们之间版本关系)
4. 提供生产级别的监控、健康检查及外部化配置(如运维人员可以很方便的监控项目的状态)
5. 无代码生成、无需编写XML(自动配置的不会生成代码和xml,全部都集成在框架中)
1.3 springboot的缺点:
1. 人称版本帝,迭代快,需要时刻关注变化
2. 封装太深,内部原理复杂,不容易精通
1.4 如何学习springboot
通过官网,了解springboot升级的特性spring官网
1.5 注意事项
- springboot2.0升级是因为jdk升级到jdk8后,spring生态里的框架也随之升级,从而springboot也迎来了大版本的升级。springboot2,对jdk8+和maven3.3+都有版本要求
2. springboot构建
2.1创建步骤
- 首先构建一个maven项目
- 然后在pom.xml引入springboot依赖和web依赖
- 配置属性都写在resources下的application.properties中。如端口号
- 创建主程序,在类上添加@SpringBootApplication表示启动类。
- 创建一个controller类接受映射。在类上添加@Controller,在方法上添加@RequestMapping("/hello")。
注意事项:
- 在方法前添加@responseBody,返回的内容直接显示在浏览器。(在类前添加,表示对类中所有方法生效)
- @ResponseBody和@Controller可以合写成@RestController
2.2 项目部署
springboot支持直接打包成jar,直接在目标服务器运行。
步骤:
- 先引入maven依赖:spring-boot-maven-plugin
- 然后直接在idea右边的maven中打包即可

- 生成的jar文件在target中
3. springboot配置说明
3.1 依赖管理
-
pom.xml中的spring-boot-starter-parent的父项目spring-boot-dependencies声明了开发中常用的依赖的版本好,所以写maven的时候不用写版本号
-
可以修改默认版本号

-
spring-boot-starter-* : *就某种场景,只要引入starter,这个场景的所有常规需要的依赖我们都自动引入。
3.2 自动配置
-
主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来(例如可以直接加@Controller等,都会被扫描到)
-
想要改变扫描路径,在主程序类改为@SpringBootApplication(scanBasePackages=“com.atguigu”)或者@ComponentScan 指定扫描路径
-
配置拥有默认值,默认配置最终都是映射到某个类上,如:MultipartProperties。可以在配置文件application.propertise中修改默认值。springboot会按需加载所有自动配置项,如之引入了web依赖,除web外的依赖的默认值就不会配置。
-
组件配置
原先组件通过xml 配置bean,现在通过类(@Configuration+@Bean结合配置)
步骤:- 在类前添加@Configuration表示配置类:
@Configuration(proxyBeanMethods = true【默认值,保证每个@Bean方法被调用多少次返回的组件都是单实例的】
@Configuration(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】 - 在方法前添加@Bean,表示给容器注册组件,默认也是单实例的
@Bean 组件名则为方法名
@Bean(“tom”) 组件名为tom
注:
- @Bean注解的方法返回值是对象,可以在方法中为对象设置属性。(注解方法)
- @Component(注解类)
- 在类前添加@Configuration表示配置类:
-
查看组件:
- 在主方法中:
获取IOC容器:ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args); - 从容器中获得组件:Pet tom02 = run.getBean(“tom”, Pet.class);//pet类是我们自己组测的组件
- 在主方法中:
-
@Import({User.class, DBHelper.class})// 给容器中自动创建出这两个类型的组件、默认组件的名字就是全类名
-
条件装配@Conditional

如:在方法前@ConditionalOnBean(name=“tom")表示包含组件tom时才执行此方法。(也可以加在类前) -
原生配置文件引入
@ImportResource(classpath:beans.xml):对于xml组件的配置方式(这里为当前路径下的beans.xml文件),可以通过此注解将xml中的组件装配到容器中 -
配置绑定
之前相关配置,比如数据库的地址端口,是先写在配置文件中,然后在代码中要使用时,读取配置文件,遍历找到需要的属性,再赋值给数据库地址端口
现在两种方式:
1.在需要绑定的类前添加
@Component//只有在容器中的组件,才会拥有SpringBoot提供的强大功能
@ConfigurationProperties(prefix = “mycar”)//配置文件application.propertises中写mycar.price=100000,mycar.band=yh2.在需要绑定的类前添加
@ConfigurationProperties
然后在主方法前添加@EnableConfigurationProperties(Car.class)在使用时:
@Autowired
Car car;//car里的price和band就为配置文件中的值 -
自动配置原理:
• SpringBoot先加载所有的自动配置类 xxxxxAutoConfiguration
• 每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值。xxxxProperties里面拿。xxxProperties和配置文件进行了绑定
• 生效的配置类就会给容器中装配很多组件
• 只要容器中有这些组件,相当于这些功能就有了
• 定制化配置
用户直接自己@Bean替换底层的组件
用户去看这个组件是获取的配置文件什么值就去修改。
• 流程:xxxxxAutoConfiguration —> 组件 —> xxxxProperties里面拿值 ----> application.properties
4. 实践步骤
- 引入场景依赖
• https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter - 查看自动配置了哪些(选做)
• 自己分析,引入场景对应的自动配置一般都生效了
• 配置文件中debug=true开启自动配置报告。Negative(不生效)\Positive(生效) - 是否需要修改
• 参照文档修改配置项
• 自己分析。xxxxProperties绑定了配置文件的哪些。 - 自定义加入或者替换组件
• @Bean、@Component。。。 - 自定义器 XXXXXCustomizer;
…
5. 开发技巧:
5.1 lombok (可以自动生成实体类中的get,set,tostring,有参无参构造方法)
步骤:
-
pom.xml中引入
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> -
idea中搜索安装lombok插件
-
使用 ( 在需要生成的实体类前添加)
@NoArgsConstructor//生成无参构造方法
@AllArgsConstructor//生成全参构造方法
@Data//生成get ,set方法
@ToString//生成toString方法
@Slf4j //日志,使用直接在类下的方法中log.info(“请求…”);
5.2 热部署:dev-tools
spring initializer:创建项目时,勾选项目需要的功能,直接添加pom.xml相关依赖等
5.3 配置文件简化 :yaml
之前是将配置写在application.propertises中,现在可以写在application.yml中
文件结尾可以为:yml或者yaml
可以为yaml文件增加提示功能,如写类会显示其对应的方法:
步骤:
- 引入maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
- 因为这个跟项目运行无关,所以在打包的时候可以去除这些内容,可以在maven中增加下面内容,表示打包时去除此项
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-----这是增加的内容以及位置----->
<configuration>
<excludes>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>
</excludes>
</configuration>
<!------------------------------->
</plugin>
</plugins>
</build>
6.web开发相关:
6.1静态资源
- 静态资源访问
只要在类路径下: /static (or /public or /resources or /META-INF/resources都称为静态资源,都可以直接访问,页面请求时,一般会先去Controller里找是否有对应的映射,没有就会去静态资源找。可以改变静态路径位置。一般网站开发在用户未登录前是不能访问某些页面,所以会做拦截,所以为了避免将静态资源拦截,一般静态资源前会额外加一个路径,然后在拦截的地方开放静态资源的访问。 - 初始页面,页面图标
默认index.html favicon.ico放在静态资源,自动识别。(注意:配置静态资源前缀会影响识别)
6.2 Rest表单提交:
- 同一张表可能删除,添加,修改,查看操作,一个对应一个映射太麻烦,就可以使用一个映射的方法。在表单提交的时候做相关处理就能实现。
(约定: GET-获取用户 DELETE-删除用户 PUT-修改用户 POST-保存用户) - 实现步骤:
-
首先配置开启表单rest风格功能:
spring: mvc: hiddenmethod: filter: enabled: true #开启页面表单的Rest功能 -
映射写法:
@RequestMapping(value = “/user”,method = RequestMethod.GET)
@RequestMapping(value = “/user”,method = RequestMethod.DELETE)
@RequestMapping(value = “/user”,method = RequestMethod.PUT)
也可简写为
@GetMapping
@DELETEMapping -
表单写法

827

被折叠的 条评论
为什么被折叠?



