[关闭]
@zhongdao 2022-02-24T05:12:18.000000Z 字数 5085 阅读 207

ttip

未分类


spring 介绍

http://c.biancheng.net/spring/spring-abc.html
Spring 框架是一个分层的、面向切面的 Java 应用程序的一站式轻量级解决方案,它是 Spring 技术栈的核心和基础,是为了解决企业级应用开发的复杂性而创建的。

在实际开发中,服务器端应用程序通常采用三层体系架构,分别为表现层(web)、业务逻辑层(service)、持久层(dao)。

IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。

Spring 通过 IoC 容器来管理所有 Java 对象的实例化和初始化,控制对象与对象之间的依赖关系。我们将由 IoC 容器管理的 Java 对象称为 Spring Bean,它与使用关键字 new 创建的 Java 对象没有任何区别。

控制反转(IoC)

在传统的 Java 应用中,一个类想要调用另一个类中的属性或方法,通常会先在其代码中通过 new Object() 的方式将后者的对象创建出来,然后才能实现属性或方法的调用。为了方便理解和描述,我们可以将前者称为“调用者”,将后者称为“被调用者”。也就是说,调用者掌握着被调用者对象创建的控制权。

但在 Spring 应用中,Java 对象创建的控制权是掌握在 IoC 容器手里的,其大致步骤如下。
1. 开发人员通过 XML 配置文件、注解、Java 配置类等方式,对 Java 对象进行定义,例如在 XML 配置文件中使用 标签、在 Java 类上使用 @Component 注解等。
2. Spring 启动时,IoC 容器会自动根据对象定义,将这些对象创建并管理起来。这些被 IoC 容器创建并管理的对象被称为 Spring Bean。
3. 当我们想要使用某个 Bean 时,可以直接从 IoC 容器中获取(例如通过 ApplicationContext 的 getBean() 方法),而不需要手动通过代码(例如 new Obejct() 的方式)创建。

IoC 带来的最大改变不是代码层面的,而是从思想层面上发生了“主从换位”的改变。原本调用者是主动的一方,它想要使用什么资源就会主动出击,自己创建;但在 Spring 应用中,IoC 容器掌握着主动权,调用者则变成了被动的一方,被动的等待 IoC 容器创建它所需要的对象(Bean)。

这个过程在职责层面发生了控制权的反转,把原本调用者通过代码实现的对象的创建,反转给 IoC 容器来帮忙实现,因此我们将这个过程称为 Spring 的“控制反转”。

依赖注入

控制反转核心思想就是由 Spring 负责对象的创建。在对象创建过程中,Spring 会自动根据依赖关系,将它依赖的对象注入到当前对象中,这就是所谓的“依赖注入”。

IoC 的工作原理

在 Java 软件开发过程中,系统中的各个对象之间、各个模块之间、软件系统和硬件系统之间,或多或少都存在一定的耦合关系。

若一个系统的耦合度过高,那么就会造成难以维护的问题,但完全没有耦合的代码几乎无法完成任何工作,这是由于几乎所有的功能都需要代码之间相互协作、相互依赖才能完成。因此我们在程序设计时,所秉承的思想一般都是在不影响系统功能的前提下,最大限度的降低耦合度。

IoC 底层通过工厂模式、Java 的反射机制、XML 解析等技术,将代码的耦合度降低到最低限度,其主要步骤如下。
在配置文件(例如 Bean.xml)中,对各个对象以及它们之间的依赖关系进行配置;
我们可以把 IoC 容器当做一个工厂,这个工厂的产品就是 Spring Bean;
容器启动时会加载并解析这些配置文件,得到对象的基本信息以及它们之间的依赖关系;
IoC 利用 Java 的反射机制,根据类名生成相应的对象(即 Spring Bean),并根据依赖关系将这个对象注入到依赖它的对象中。

由于对象的基本信息、对象之间的依赖关系都是在配置文件中定义的,并没有在代码中紧密耦合,因此即使对象发生改变,我们也只需要在配置文件中进行修改即可,而无须对 Java 代码进行修改,这就是 Spring IoC 实现解耦的原理。

IoC 容器的两种实现

IoC 思想基于 IoC 容器实现的,IoC 容器底层其实就是一个 Bean 工厂。Spring 框架为我们提供了两种不同类型 IoC 容器,它们分别是 BeanFactory 和 ApplicationContext。

BeanFactory 是 IoC 容器的基本实现,也是 Spring 提供的最简单的 IoC 容器,它提供了 IoC 容器最基本的功能,由 org.springframework.beans.factory.BeanFactory 接口定义。

  1. public static void main(String[] args) {
  2. BeanFactory context = new ClassPathXmlApplicationContext("Beans.xml");
  3. HelloWorld obj = context.getBean("helloWorld", HelloWorld.class);
  4. obj.getMessage();
  5. }

ApplicationContext 是 BeanFactory 接口的子接口,是对 BeanFactory 的扩展。ApplicationContext 在 BeanFactory 的基础上增加了许多企业级的功能,例如 AOP(面向切面编程)、国际化、事务支持等。

ApplicationContext 接口有两个常用的实现类,
ClassPathXmlApplicationContext
FileSystemXmlApplicationContext

  1. public static void main(String[] args) {
  2. //使用 FileSystemXmlApplicationContext 加载指定路径下的配置文件 Bean.xml
  3. BeanFactory context = new FileSystemXmlApplicationContext("D:\\eclipe workspace\\spring workspace\\HelloSpring\\src\\Beans.xml");
  4. HelloWorld obj = context.getBean("helloWorld", HelloWorld.class);
  5. obj.getMessage();
  6. }

Bean

由 Spring IoC 容器管理的对象称为 Bean,Bean 根据 Spring 配置文件中的信息创建。

我们可以把 Spring IoC 容器看作是一个大工厂,Bean 相当于工厂的产品。如果希望这个大工厂生产和管理 Bean,就需要告诉容器需要哪些 Bean,以哪种方式装配。

Spring 配置文件支持两种格式,即 XML 文件格式和 Properties 文件格式。
Properties 配置文件主要以 key-value 键值对的形式存在,只能赋值,不能进行其他操作,适用于简单的属性配置。
XML 配置文件采用树形结构,结构清晰,相较于 Properties 文件更加灵活。但是 XML 配置比较繁琐,适用于大型的复杂的项目。

通常情况下,Spring 的配置文件都是使用 XML 格式的。XML 配置文件的根元素是 ,该元素包含了多个子元素 。每一个 元素都定义了一个 Bean,并描述了该 Bean 是如何被装配到 Spring 容器中的。

spring boot

image_1fsdi16271fl71p9u1rs4121m1ks79.png-23.7kB

需求开发

页面:
设备管理
csr校验
厂商报文
未识别厂商报文

部署过程

前端

  1. cd /root/src/ttip-front-end
  2. npm install
  3. npm install axios
  4. npm install @mui/material
  5. npm install @mui/x-data-grid
  6. npm install react-cookies
  7. npm install md5
  1. sudo apt install xsel
  2. npm run build
  3. npm install -g serve
  4. serve -s build

The last command shown above will serve your static site on the port 3000

数据库

执行
sqlite3 test.db

初始化插入数据

id: 1234 ,
password: 1234
vendor_id: 1234

  1. insert into vendor(id,password,vendor_id,vendor_name) values(1234,"e7df7cd2ca07f4f1ab415d457a6e1c13","1234","test_vendor_name");

.read ./test.sql

schema

.schema

  1. CREATE TABLE device (device_id varchar(255) not null, licence varchar(255), vendor_id varchar(255), primary key (device_id));
  2. CREATE TABLE hibernate_sequence (next_val bigint);
  3. CREATE TABLE kdmresponse (id integer not null, kdm varchar(255), code varchar(255), device_id varchar(255), msg varchar(255), show_id varchar(255), signature varchar(255), status varchar(255), time_stamp varchar(255), primary key (id));
  4. CREATE TABLE movie (id varchar(255) not null, dcp varchar(255), kdm varchar(255), primary key (id));
  5. CREATE TABLE register_response (id integer not null, code integer not null, csr varchar(255), device_id varchar(255), license varchar(255), msg varchar(255), state integer not null, vendor_id varchar(255), primary key (id));
  6. CREATE TABLE unknown_msg (id integer not null, deviceipaddress varchar(255), mac varchar(255), msgtype varchar(255), processresult varchar(255), requestmsg varchar(255), requestmsgparsed varchar(255), timestamp varchar(255), primary key (id));
  7. CREATE TABLE vendor (id integer not null, password varchar(255), vendor_id varchar(255), vendor_name varchar(255), primary key (id));
  8. CREATE TABLE vendor_msg (id integer not null, deviceid varchar(255), deviceipaddress varchar(255), mac varchar(255), msgtype varchar(255), processresult varchar(255), requestmsg varchar(255), requestmsgparsed varchar(255), responsemsg varchar(255), responsemsgparsed varchar(255), timestamp varchar(255), vendorid varchar(255), primary key (id));

sqlite> .databases
main: /root/src/ttip-back-end/test.db

.tables

  1. device kdmresponse register_response vendor
  2. hibernate_sequence movie unknown_msg vendor_msg

log

每个日志有个id,

问题定义

终端日志的设置
格式、
传输机制

服务平台的处理
验签:验证日志来自特定终端

输入输出

一条链

不滚着签

对内容签

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注