一,概述:

现在市场已经形成了一定的规模,系统架构的复杂度也越来越高(例如:单体架构,分布式架构,微服务架构)软件的整个架构体系正在发生很大的变化,在这种变化中企业现在更注重开箱即用,注重在生态圈中的深度融合,注重轻量级的运维,由此springboot诞生

二,核心特征:

springboot是一个脚手架,构建于spring框架(framework)基础之上,基于快速构建理念,提供了自动配置功能,可实现其开箱即用特征(创建完一个基本项目以后,可零配置或少量配置就可以运行我们的项目)其核心主要在如下几个方面

a:起步依赖--项目底层帮你关联依赖

b:自动配置

c:健康检查--监控

三,bean对象的创建

  • 构造方法创建bean对象
  • 静态工厂创建bean对象
  • 实例工厂创建bean对象

四,注解

  • @SpringBootTest注解用于告诉框架此测试类交给Spring管理
  • @Autowired注解描述属性时用于告诉Spring框架要为此属性注入一个值描述属性时,用于告诉spring框架暗属性类型从容器查找对应对象进行赋值,假如找到一个类型的对象直接通过反射技术进行赋值,假如还有多个会按属性名字进行匹配,@Autowired//可以描述属性,构造方法,set方法等,描述属性时,用于告诉spring框架按属性类型从容器查找对应对象进行赋值,假如找到一个类型的对象直接通过反射技术进行赋值,假如还有多个会按属性名字进行匹配查找(从spring容器查找那个bean的名字与这个属性名字形同)有相同名字的bean则直接注入没有则抛异常,当然我们也可以指定注入那个名字的bean对象,此时需要 借助 @Qualifier指定要注入指定对象的名字
  • @Lazy注解用于描述类其目的是告诉spring框架此类支持延迟加载,通常配合单例(singleton)作用域使用
  • @Scope是Spring中用于定义Bean对象作用域的一个注解,其常用的值有singleton(整个内存有一份bean实例刺史李河是创建与类的延迟加载特性配置有关,此实例创建以后生命周期会由spring框架管理),propotype(每次获取都会创建新的管理此实例创建与lazy无关,这个实例创建后不会交给spring管理Spring可以对其初始化,但不负责销毁) @Scope(prototype)多例作用域此类实例与lazy无关默认何时需要核实创建并且不会存储到spring容器 @Scope(singletion)Scope默认就是单例作用域会配合延迟加载特性使用

注:* 延迟加载并不是延迟对类的加载,二是在启动时暂时不创建类的实例,假如想看一下内存中的类是否被加载 可以添加参数-XX:+TraceClassLoading--通过这个jvm参数检测类是否存在

  • @PostContrcut注解用于描述bean对象生命周期方法中的初始化方法,此方法会在对象构造方法之后执行(是对象创建以后的初始化)
  • @PreDestory注解用于描述Bean对象生命周期中的销毁方法 ,此方法会在对象销毁之前执行(作用域为prototype时此方法不会执行)
  • @Component注解时将普通的对象实例化到spring容器中相当于配置文件的<bean id="" class=""/>泛指各种组件就是说当我们的类不属于各个归类的时候就可以用@Component来标志这个类
  • 就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。
  • @Qualifier注解,@Autoeired是根据类型进行自动装配的,如果当上下文中出现多个UserDao使用Bean时就会抛出BeanCreationException异常如果上下文中不存在UserDao类型的bean也会抛出BeanCreationException异常我们可以用@Qualifier配合@Autowired来解决这些问题 如下:

①可能存在多个UserDao实例

  1. @Autowired
  2. @Qualifier("userServiceImpl")
  3. public IUserService userService;

这样Spring会找到id为userServiceImpl和userDao的bean进行装配

②可能不存在UserDao实例

  1. @Autowired(required = false)
  2. public IUserService userService

五,异常分析

bean异常

图片.png

空指针异常
图片.png

六,spring框架管理bean对象的优势

spring是一个资源整合框架(framework)通过spring可将很多资源(自己写的对象或第三方提供的对象,例如连接池等)整合在一起,然后进行科学应用,一遍提高更好的对外提供服务

优势

  • lazy延迟加载(懒加载):对象调用时何时需要何时加载不用时无需加载和实例化
  • lifecycle Method生命周期方法:更好的实现对象的初始化和资源的销毁
  • Scope作用域:提供singleton,propotype等作用域,使创建对象时根据访问次数来选择相关域
  • 可以基于用户管理设计管理对象之间的依赖关系来降低两者之间的耦合关系,从而提供程序的复用性和扩展性

七,补充 --spring框架的好处为什么要用spring?

  1. 方便解耦,便于开发(spring就是一个大工厂,可以将所有对象的创建和依赖关系维护都交给spring管理)
  2. spring支持aop编程(spring面向切面编程。可以很方便的实现对程序进行权限拦截和运行监控等功能)
  3. 声明事务的支持(通过配制就完成对事物的支持,不需要手动编程)
  4. 方便程序测试,spring对Junit支持,可以通过注解方便测试spring程序
  5. 方便集成各种优秀的框架
  6. 降低javaEE API的使用难度:spring对javaee开发中非常难用的一些API例如JDBC,javaMail远程调用等,都提供了封装,使这些API应用难度大大降低

李诗一
1 声望0 粉丝