SpringBoot进阶

一、三层架构

作用:提高代码复用率,降低耦合度

三层架构分层:

  • Controller层:控制层,负责接收前端发送的请求,对请求进行处理并响应数据
  • Service层:业务层,负责处理具体的业务逻辑
  • Dao层:数据访问层,也称为持久层,负责数据的增删改查等操作

三层架构程序执行流程

  • 浏览器发送请求到Controller层
  • Controller层调用Service层进行业务处理,并响应数据给浏览器
  • Service层调用Dao层进行数据处理,并响应数据给Controller层
  • Dao层对数据进行增删改查等操作,并响应数据给Service层

项目结构:

二、IOC和DI

1、概念:IOC也被称为控制反转,对象不需要主动创建,由容器创建、管理对象,这个容器称为IOC容器或Spring容器,同时IOC容器管理的对象就是Bean对象

IOC容器注解:

注解

说明

位置

@Controller

@Component衍生注解,表示使用在控制器类上

标注在控制器类上

@Service

@Component衍生注解,表示使用在业务类上

标注在业务类上

@Repository

@Component衍生注解,表示使用在数据访问类上

标注在数据访问类上,使用MyBatis框架后不再使用

@Component

声明bean的基础注解

不属于以上三类时,使用此注解

2、DI就是依赖注入,就是标记IOC容器管理的对象要注入到哪里

DI依赖注入注解:@Autowired

3、DOC详解:

DOC的底层是Spring中使用了ConcurrentHashmap,会把使用了IOC容器注解的类通过无参构造方法new出对象,Key就是类名首字母小写,Value是对象的地址

Bean对象的名称默认是类名首字母小写,也可以通过四大注解的value属性进行修改

在主启动类中@SpringBootApplication:启动类注解,也是SpringBoot框架的核心注解

@SpringBootApplication也是一个复合注解,包含了了@ComponentScan组件扫描注解,默认扫描启动类同级及以下所有包,如果需要扫描启动类上级或外面的包需要手动设置@ComponentScan注解的basePackages属性的值,位置是加在启动类上(不推荐修改)

4、Bean对象的作用域:

Bean对象的默认作用域是单例的,从Bean容器获取的对象一直是一个

要设置为多例,可以在加了四大注解的类上加上@Scope(value = "prototype", proxyMode = ScopedProxyMode.INTERFACES)

5、Bean对象懒加载

Bean对象开启懒加载:@Lazy,默认是true

  • @Lazy注解可以作用在类上,或者方法上,表示Bean对象开启懒加载
  • 注意:使用@Lazy的前提是要操作的Bean要使用默认的单例模式,多例Bean无法开启懒加载,因为多例Bean本身就是使用时才创建

6、Bean生命周期五个阶段

实例化、依赖注入、初始化、使用、销毁

7、DI依赖注入的三种方式:

  1. 属性注入:直接在类中声明的对象上使用@Autowired进行依赖注入

  1. setter注入:在属性/字段对应的set方法上方添加@Autowired注解

注意:setter方式注入的对象不能为多例或者懒加载,否则会找不到Bean对象,除非双方都是多例或者懒加载

  1. 构造器注入:通过有参构造方法进行依赖注入

8、多同类型Bean注入

解决方式:

① @Primary:当存在多个相同类型的Bean注入时,在要使用的类上加上@Primary注解,来确定默认的实现

② @Qualifier注解:指定当前要注入的bean对象。在@Qualifier的value属性中,指定注入的bean的名称,@Qualifier注解不能单独使用,必须配合@Autowired使用

③ @Resource注解:bean的名称进行注入。通过name属性指定要注入的bean的名称

9、@Resource和@Autowired的区别

    1. 来源不同:
        1. @Autowired:是Spring框架提供的注解
        2. @Resource:是JDK提供的注解
    1. 依赖查询的顺序不同:
        1. @Autowired查找顺序:先根据类型(byType)查找,如果存在多个(Bean)再根据名称(byName)进行查找
        2. @Resource查找顺序:先根据名称(byName)查找,如果(根据名称)查找不到,再根据类型(byType)进行查找
    1. 支持注入方式不同:
        1. @Autowired支持属性注入、setter注入、构造器注入
        2. @Resource支持属性注入、setter注入
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值