Spring 初识

news2024/12/23 0:42:16

1、framework(框架)

框架就是一些类和接口的集合,通过这些类和接口协调来完成一系列的程序实现,JAVA框架可以分为三层:表下层、业务层和物理层。框架又叫做开发中的半成品,他不能提供整个web应用程序的所有东西,但是有了框架,我们就可以集中精力进行业务逻辑的开发而不用去关心他的技术实现以及一些辅助的业务逻辑。大家熟知的Structs和Spring就是表示层和业务层框架的强力代表。

2、架构发展历程

(1)单一应用架构:当网站流量很小时,只需要一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量量的数据访问框架(ORM)是关键。

(2)垂直应用架构:当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,提高效率的方法之一是将应用拆成互不相干的几个应用,以提高效率。此时,用于加速前端页面开发的web框架(MVC)是关键。

(3)分布式架构:当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快加速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

(4)流动计算架构:当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现。此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。

3、spring开发文档

4、实现业务层与其他层之间的耦合实例

(1)新建一个Java项目

 (2)新建一个类,放在包entity下,声明两个变量id和username,声明get()和set()以及tostring()方法,用快捷键alt+insert,选中id和username两个变量,可以自动声明变量,tostring也是一样的。

 (3)新建一个接口

(4)新建一个接口的实现方法 

(5)搭建数据访问层,首先新建一个接口

(6)新建一个接口的实现方法

 (7)方法实现,首先打开Main方法,编写如下代码(会报错,暂时不用管)

package org.example;

import service.IUserService;
import service.Impl.UserServiceImpl;

public class Main {
    public static void main(String[] args) {
        IUserService service=new UserServiceImpl();
        service.getUser();
    }
}

打开UserService接口,定义方法

 打开UserServiceImpl实现方法

package service.Impl;

import dao.IUserDao;
import dao.Impl.UserDaoImpl;
import service.IUserService;

public class UserServiceImpl implements IUserService {
 IUserDao dao=new UserDaoImpl();
    @Override
    public void getUser() {
        dao.getUser();
    }
}

打开UserDao定义方法

 打开UserDaoImpl实现方法,访问数据库就是在这里进行,这里简单演示以下输出一句话

 运行Main方法后可以看到终端输出了结果

5、但是上面这种方法,在后续如果方法改变了,需要修改的地方很多,任何的变更都会加大造成系统bug的可能性。所以引入了以下两个原则,用于解决这个麻烦。

(1)接口分离原则:模块间要通过抽象接口分离开,而不是通过具体的类强耦合起来。

(2)依赖倒置原则:具体实现依赖抽象,下层依赖上层。就如上面那个程序,service是上层,dao是下层,service依赖dao。进行反转后使dao依赖service。这就需要搭建IOC。

 6、IOC代码实现

(1)最low的实现方式:导入jar包,配置xml

(2)一般实现方式:maven+注解+xml

(3)高级实现方式:springboot+javaconfig

这里先以最简单的方式来实现

①导入jar包

首先打开下面这个网址点这里,界面如下图 

点击5.2.0的那个zip文件,跳转到如下界面,选择5.2.6的第一个dist,右键点击下载 

下载后打开可以看到很多jar包

 把他保存到桌面或者是磁盘里,打开idel,file->Project Structure->Libraries->+->java,找到刚才保存文件下的五个jar包并导入

 

在左侧查看是否导入成功

 

2)配置xml,首先新建一个.xml文件

实现控制反转

    <bean class="dao.Impl.UserDaoOrcleImpl" id="userDaoOrcle"/>
    <bean class="service.Impl.UserServiceImpl" id="userService"></bean>

 

 实现依赖注入,首先给UserserviceImpl的dao添加get和set方法

配置.xml文件

 

 改写主函数

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/592005.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

赋能中国信创·破局万亿市场|GBASE创新实践助力信创产业发展

5月24日&#xff0c;2023年&#xff08;第二届&#xff09;中国信创产业大会在广州隆重举行&#xff0c;大会以“赋能中国信创破局万亿市场”为主题&#xff0c;聚焦信创国产化基础硬件设施、基础软件、信息安全、应用软件等领域新动态、新成果和新经验。GBASE南大通用受邀出席…

2023年上半年网络工程师下午真题及答案解析

试题一(20分) 某企业办公楼网络拓扑如图1-1所示。该网络中交换机Switch1-Switch4均是二层设备&#xff0c;分布在办公楼的各层&#xff0c;上联采用千兆光纤。核心交换机、防火墙、服务器部署在数据机房&#xff0c;其中核心交换机实现冗余配置。 问题1(4分) 该企业办公网络采…

c语言编程练习题:7-85 温度转换

#include <stdio.h> int main(){int fahr 150;double celsius 5.0*(fahr-32)/9;printf("fahr 150, celsius %d",(int)celsius);return 0;}代码来自&#xff1a;https://yunjinqi.top/article/210

哈佛大学肯尼迪学院博士后怎么样?含金量高吗?

哈佛大学肯尼迪学院博士后含金量很高&#xff0c;毋需置疑&#xff01; 哈佛大学是美国历史最悠久的高等院校:成立于1636年&#xff0c;最早由马萨诸塞州殖民地立法机关创办&#xff0c;最初被称为“新市民学院”。学校于1639年3月更名为“哈佛学院”&#xff0c;以纪念在成立初…

基于深度学习的高精度交警检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度交警检测识别系统可用于日常生活中检测与定位交警目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的交警目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数据…

【配电网重构】基于混合整数二阶锥配电网重构研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Web的基本漏洞--XSS漏洞

目录 一、XSS漏洞介绍 1.XSS漏洞原理 2.XSS漏洞的类型 反射型 存储型 DOM型 三者区别 3.漏洞识别 4.攻击方式 5.XSS漏洞危害 6.漏洞防御 二、XSS漏洞的攻击方式--注入脚本代码 1.反射型 2.存储型 3.DOM型 4.XSS盲打 5.XSS漏洞的绕过技术 双写绕过 编码绕过 …

【ARIMA-WOA-LSTM】差分自回归移动平均方法-鲸鱼优化算法-LSTM预测研究(python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Spring Security的账号密码登录+Azure AD的授权登录集成Demo

一、项目准备&#xff1a; 1.创建一个Springboot项目。 2.注册一个微软的Azure AD服务&#xff0c;并且注册应用&#xff0c;创建用户。 springboot项目pom文件如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"…

广播风暴的成因以及如何判断、解决

广播风暴&#xff08;broadcast storm&#xff09;简单的讲是指当广播数据充斥网络无法处理&#xff0c;并占用大量网络带宽&#xff0c;导致正常业务不能运行&#xff0c;甚至彻底瘫痪&#xff0c;这就发生了“广播风暴”。一个数据帧或包被传输到本地网段 &#xff08;由广播…

ObjectARX如何判断点和多段线的关系

目录 1 基本思路2 相关知识点2.1 ECS坐标系概述2.2 其他点坐标转换接口2.3 如何获取多段线的顶点ECS坐标 3 实现例程3.1 接口实现3.2 测试代码 4 实现效果 在CAD的二次开发中&#xff0c;点和多段线的关系是一个非常重要且常见的问题&#xff0c;本文实现例程以张帆所著《Objec…

Vue事件大小写驼峰命名导致无法执行问题解决

文章目录 问题解决方案问题大致原因 问题 驼峰命名事件名不会正常执行 <!DOCTYPE html> <html lang""> <head><title>Vue Emit Example</title><script src"../js/vue.js"></script> </head> <body…

港科夜闻|香港科技大学与浪潮集团签署战略合作协议,共同推动技术研发和成果转化...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科技大学与浪潮集团签署战略合作协议&#xff0c;共同推动技术研发和成果转化。根据协议&#xff0c;双方将聚焦云计算、大数据、新一代通信等领域&#xff0c;围绕联合研发、人才培养、研发中心建设和超高清显示等方…

基于车站约束的地铁系统协调客流控制模型与算法

1 文章信息 《Model and algorithm of coordinated flow controlling with station-based constraints in a metro system》是2021年发表在Transportation Research Part E上的一篇文章。 2 摘要 随着城市人口的增长和交通需求的快速增长&#xff0c;世界上许多大城市的地铁系统…

Python3数据分析与挖掘建模(7)使用matplotlib和seaborn画图

1. 可视化分析 1.1 概述 可视化分析是数据分析中重要的一环&#xff0c;它可以帮助我们更直观地理解数据的特征、趋势和关系。在Python中&#xff0c;有多个库可以用于数据可视化&#xff0c;包括matplotlib、seaborn和plotly等。 1.2 常用的可视化方法和对应的库&#xff1…

4.3. 缓冲流

缓冲流是Java I/O中的一个重要概念&#xff0c;它可以提高文件读写的性能。在本节中&#xff0c;我们将详细讨论缓冲流的概念、使用方法以及实例。 缓冲流有两种类型&#xff1a;缓冲字节流和缓冲字符流。缓冲字节流包括BufferedInputStream和BufferedOutputStream&#xff0c…

vue中this.$set的用法

this.$set( target, key, value ) target&#xff1a;要更改的数据源(可以是对象或者数组) key&#xff1a;要更改的具体数据 value &#xff1a;重新赋的值 当我们给对象加了一个属性&#xff0c;在控制台能打印出来&#xff0c;但是却没有更新到视图上时&#xff0c;这个时…

【靶场】双重内网渗透测试场景

文章目录 前言一、开始渗透二、横向移动提交flag总结 前言 使用vulfocus搭建一个内网场景靶场拓扑如下&#xff1a; 入口有两个&#xff0c;一个是think PHP2.x命令执行和5x的命令执行漏洞&#xff0c;后续需要搭建二层隧道进行渗透测试。 一、开始渗透 目标&#xff1a; …

Vue为什么组件销毁后定时器会继续

原因 在 Vue 中&#xff0c;组件销毁后定时器可能会继续运行&#xff0c;这是因为这个框架使用了虚拟 DOM 技术。虚拟 DOM 可以提高渲染效率和性能&#xff0c;但也带来了一些问题。 当我们在 Vue 组件中创建定时器时&#xff0c;实际上是在组件的生命周期方法&#xff08;例如…

OJ练习第124题——叶值的最小代价生成树

叶值的最小代价生成树 力扣链接&#xff1a;1130. 叶值的最小代价生成树 题目描述 给你一个正整数数组 arr&#xff0c;考虑所有满足以下条件的二叉树&#xff1a; 每个节点都有 0 个或是 2 个子节点。 数组 arr 中的值与树的中序遍历中每个叶节点的值一一对应。 每个非叶节…