0
点赞
收藏
分享

微信扫一扫

防火墙双机热备与NAT Server结合使用

天行五煞 2024-02-03 阅读 9

框架技术-SpringBoot进阶

  • 三层架构
  • Spring框架
  • IOC和DI
  • 三层架构代码改造
  • IOC详解
  • DI详解

一、三层架构

概念:程序开发时,应该遵守单一职责原则,意思就是尽可能让每个接口、类、方法的职责更单一

反例:我们的所有操作都是在Controller类中进行完成的,现在我们实现的只是简单的增删改查,在真实企业开发中一个业务操作有可能达到几百上千行代码,那么此时如果所有代码都放在Controller中是不合理的

企业级开发中,通常使用分层开发解决上述问题,也就是使用三层架构

命名规范

三层包名类名
ControllercontrollerXxxController
ServiceService层包名:service Service层实现类包名:service.impl接口:IXxxService 实现类:impl.XxxServiceImpl
Dao( Data Access ObjectDao层包名:dao Dao层实现类包名:dao.impl接口:IXxxDao 实现类:impl.XxxDaoImpl

二、Spring框架

概念:一个开源的容器框架,提供了IOC和AOP两大核心机制。

  1. 高内聚低耦合

概念:高内聚和低耦合是软件工程中的核心概念,是判断软件设计好坏的标准,它们分别从不同的角度描述了软件系统的模块或组件之间的关系

  1. 解耦思想

概念:降低耦合度

例子:接口和实现类在同一个地方出现就是任然是一个高度耦合代码

StudentService service = new StudentServiceImpl();
IStudentDao dao = new StudentDaoImpl();
//一个接口可以有多个实现类,假如实现类换了一种实现,那么这个代码就必须要改
IStudentDao dao = new StudentXxxImpl();
IStudentDao dao = new StudentYyyImpl();
//注意:接口是不会变化的,就是实现变了,操作数据库有很多技术实现:原生的JDBC,框架SpringJdbc,JPA,Mybatis

解决方案:不用new创建对象,使用Spring的IOC和依赖注入DI

注意:ConcurrentHashMap支持高效的并发访问,可以有效地提高系统的性能,ConcurrentHashMap 是一种线程安全的 HashMap,避免了高并发访问下线程安全问题,建议使用

三、IOC和DI

  1. IOC( Inversion Of Control)控制反转

概念:对象的创建权利由程序员主动创建转移到容器,由容器创建和管理对象,这种思想称为控制反转。这个容器称为IOC容器或Spring容器

控制:对象创建,属性赋值,对象生命周期管理【Bean的生命周期】 - 统称为管理对象
反转:把管理对象的权限转移给了容器实现,由容器完成对象的管理
正转:使用new构造方法创建对象,开发人员掌握了对象的全部过程
    
注意:被IOC容器创建、管理的对象称为Bean对象

1.1IOC注解

概念:想要在程序启动时将对象交由IOC帮我们创建并放入到容器中,那么我们需要告诉IOC哪些类需要交给它创建并管理,此时就需要在类上打上对应的注解

注解说明位置
@Controller@Component衍生注解,表示使用在控制器类上标注在控制器类上
@Service@Component衍生注解,表示使用在业务类上标注在业务类上
@Repository@Component衍生注解,表示使用在数据访问类上标注在数据访问类上,使用MyBatis框架后不再使用
@Component声明bean的基础注解不属于以上三类时,使用此注解
  1. DI(Dependency Injection)依赖注入

概念:对象创建出来就是为了使用它,使用IOC注解创建出来的对象,其实就是为了给属性赋值

//使用IOC注解创建出来Dao层对象,是为了在Service业务层中调用Dao层对象方法时给成员变量Dao赋值
private IStudentDao studentDao;
//使用IOC注解创建出来的Service层对象,是为了在Controller控制器中调用Service层对象方法给成员变量Sservice赋值
private IStudentService studentService;

2.1DI注解
概念:想要在IOC将对象创建完成后将Bean对象注入到我们声明的对象中时,需要使用到Spring提供的@Autowired注入注解打到声明对象上就可以实现从容器中自动获取对应实例进行注入

注解说明位置
@Autowired依赖注入注解标注在需要依赖注入的对象上

四、三层架构代码改造(使用IOC和DI直接改造三层架构代码)

4.1. 改造控制器Controller

4.2. 改造业务代码Service

4.3. 改造数据访问代码Dao

五、IOC详解

5.1 概念:IOC控制反转其实就是将对象交给Spring管理。管理对象的创建、属性赋值DI、对象的作用域、对象的懒加载和生命周期

5.2 Spring容器

5.3 Bean名称

概念:Spring管理的对象称之为Bean。在IOC容器中,每一个Bean都有一个属于自己的名字,可以通过注解的value属性指定bean的名字。如果没有指定,默认为类名首字母小写

例:通过注解value属性指定名称,但建议用默认名字

@Service(value ="studentServiceImpl")  // 当前类交由IOC管理

5.4 组件扫描

概念:IOC注解和DI注解的类所在包必须是跟启动类所在包平级或者在启动类所在包的子包下才行

不在平级或者子包的解决方案:

在启动类加上注解@ComponentScan手动指定扫描包的路径

@ComponentScan(basePackages = {"service""cn.itsource") // 手动指定包路径

5.5 Bean对象作用域

概念:Bean 的作用域是指Bean在Spring整个框架中的某种行为模式

例:singleton单例作用域,就表示 Bean 在整个 Spring中只有一份,它是全局共享的。当有人修改了这个值之后,那么另一个人读取到的就是被修改后的值

Bean的常见作用域有以下 5 种:

作用域说明
singleton单例作用域,Bean对象默认作用域
prototype多例作用域,每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean实例
request请求作用域,只适用于SpringMVC框架,了解
session会话作用域,只适用于SpringMVC框架,了解
application全局作用域,只适用于SpringMVC框架,了解

5.6 改变Bean的作用域

@Scope注解可以作用在交给Spring管理的类上,使用value属性设置作用域。value属性:指定作用域

ConfigurableBeanFactory.SCOPE_PROTOTYPE:即"prototype" 
ConfigurableBeanFactory.SCOPE_SINGLETON:即"singleton",默认值
WebApplicationContext.SCOPE_REQUEST:即"request"
WebApplicationContext.SCOPE_SESSION:即"session"
WebApplicationContext.SCOPE_APPLICATION:即"application"

5.7 Bean对象懒加载

概念:IOC容器中的Bean默认是在Spring启动时就进行加载并放入到容器中,有的时候我们并不需要对象在Spring启动时就进行加载,所以可以设置Bean对象为懒加载

分类:

使用方法:@Lazy注解

5.8 Bean的生命周期

概念:生命周期指的是Spring框架中一个Bean对象从实例化到被垃圾回收器回收的这么一个过程,我们通常把这个过程称作,Bean的生命周期 (一个Bean对象从创建到销毁的这么一个过程)

分类阶段:

六、DI详解

6.1 概念:对象创建出来就是为了使用它。使用IOC注解创建出来的对象,其实就是为了给属性赋值

@Autowired注解翻译过来叫做自动装配,默认是按照类型去IOC容器中查找Bean对象进行自动装配。

6.2 三层架构代码中使用@Autowired进行Bean对象的注入,有几种方式称为:

6.3 多个同类型Bean注入

注意:多个同类型Bean注入,会报错

解决方案:

课程总结:

1.Spring、SpringMvcSpringBoot三个框架的区别
	a.SpringBoot是一个简化配置,简化启动部署的全新框架。并不是用来替换SpringSpringMVC的,只是用于简化SpringSpringMvc的使用
	b.SpringMvc框架是一个处理请求的mvc框架,底层对Servlet进行了封装
	c.Spring框架是一个开源的容器框架,提供了IOCAOP两大核心机制。IOC控制反转主要用于创建对象和对象的依赖关系,AOP面向切面编程主要用于抽取公共业务,解耦代码方便以后维护

2.目前在学习SpringBoot中常见的注解
	a.实例化对象/管理对象的注解:
	b.注入注解:
		b1. 指定默认对象注解:
		b2. 指定Bean名字注解:@Autowired+@Qualifier("orange")@Resource(name="")
	c.响应Json数据注解:@ResponseBody@RestController
	d.匹配请求注解:@RequestMapping@XxxMapping@PatchMapping
	e.声明启动类的注解:
	f.声明SpringBoot测试类的注解:SpringBootTest(classes=启动类.class)

3.何为起步依赖,作用是什么

4.简述SpringBoot的配置文件

5.SpringBoot中多环境配置如何实现

6.SpringBoot单元测试使用步骤
7.Apifox是什么,有什么用
8.常用的数据交换格式有哪些?xml和json区别

9.Controller(SpringMvc)接收参数有哪些方式

10.什么是ResultFul风格?有哪些请求方式分别描述哪些操作
11.什么是三层架构,为什么要使用三层架构
	数据访问层Dao
	业务逻辑层Service
	表现层 - 控制器Controller
	表现层 - 视图【客户端或页面】
12.三层架构规范
	dao包
		接口:IXxxDao
		子包:impl 实现类XxxDaoImpl
	service包

	controller包
		XxxController13.domain是什么,有什么用
	域对象/实体对象, 在三层之间传递数据
14.指定Bean的对象作用域用什么注解,有哪些情况
	@Scope - 单例singleton,多例prototype
15.什么是懒加载/延迟加载和迫切加载,如何配置Bean的懒加载
	@Lazy
16.Spring中的Bean默认情况
	单例,迫切加载
17.注入有哪些方式
	属性注入,setter方法注入,有参构造
18.@Autowired@Resource区别

扩展:什么是MVCMVC=Model+View+Controller=模型+视图+控制器,mvc是程序或软件设计的一种思想。就是设计或开发一个软件必须有三个部分
a.必须有View视图,用于能接触能看到的就是视图【页面或客户端】
b.视图中的功能必须要实现,就需要Model模型-实现视图的上的功能
c.模型和视图是不能直接交互的,所以需要一个桥梁,这个就是ControllerController控制器可以接收前端请求响应数据给前端,
同时它也是一个后端代码当前可以调用Model模型中的数据
@Lazy

16.Spring中的Bean默认情况
单例,迫切加载
17.注入有哪些方式
属性注入,setter方法注入,有参构造
18.@Autowired与@Resource区别

扩展:什么是MVC?
MVC=Model+View+Controller=模型+视图+控制器,mvc是程序或软件设计的一种思想。就是设计或开发一个软件必须有三个部分
a.必须有View视图,用于能接触能看到的就是视图【页面或客户端】
b.视图中的功能必须要实现,就需要Model模型-实现视图的上的功能
c.模型和视图是不能直接交互的,所以需要一个桥梁,这个就是Controller。Controller控制器可以接收前端请求响应数据给前端,
同时它也是一个后端代码当前可以调用Model模型中的数据

举报

相关推荐

0 条评论