Spring梳理(一)

Spring 源码梳理(一) ClassPathXmlApplicationContext 1.为什么要分析Spring源码: 1)有意往架构上发展,分析Spring可清楚它做了哪些事情,如何做这些事情 2)Spring本身是对Java的丰富和发展,阅读可提高自己的水平 2.怎样分析Spring源码: 1)源码本身就是注释,是对平时应用的解释,所有没有必要句句分析,否则与把所有代码贴上没有区别 2)不关注相关方法所在类,接口,以及类之间的继承关系,只关注方法做了哪些事情即可 阅读详情
        技术如果一段时间不练,再次捡起来就相当于一次重复学习,为加深理解和降低二次学习成本,spring系列大部分将转载 张开涛的博客(人家写的好而且全面),中间会加入一些自己的理解和总结。
        说起spring,就会想起控制反转和依赖注入,这也是Spring的灵魂所在,再有其他的,可能就是一堆的配置文件或难搞懂的注解了,概念性的东西,下面两句话就够了。
        IoC 控制反转(IoC容器控制对象) :IOC不是一种技术,而是一种思想,ioc容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。

        DI(Dependency):依赖注入,通过配置,无需代码而指定目标需要的资源,完成自身的业务逻辑,而无需关心具体资源来自何处,由谁实现。

      HelloWorld,来体会spring的便捷之处

Spring下载地址: http://repo.spring.io/release/org/springframework/spring/
新建Dynamic web Project,拷入如下jar包:

        
       src下新建目录com.hello,这里不考虑分包,接下来几个文件都放在该目录下。

public interface HelloApi {
	public void say();
}
public class HelloImpl implements HelloApi {
	@Override
	public void say() {
		System.out.println("hello world!");
	}
}
项目右键->build path->java Build path->libraries->add library,加入JUnit 4包:
public class HelloTest {
	@Test
	public void testHelloWorld(){
	        //1、读取配置文件实例化一个IoC容器 
		ApplicationContext ctx=new ClassPathXmlApplicationContext("/com/hello/bean.xml");
		//2、从容器中获取Bean,注意此处完全“面向接口编程,而不是面向实现”  
		HelloApi api=ctx.getBean("hello",HelloApi.class);
		//3、执行业务逻辑  
		api.say();
	}
}
新建bean.xml
<?xml version="1.0" encoding="UTF-8"?>  
<beans  
xmlns="http://www.springframework.org/schema/beans"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xmlns:context="http://www.springframework.org/schema/context"  
xsi:schemaLocation="  
http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
http://www.springframework.org/schema/context    http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 
  <!-- id 表示你这个组件的名字,class表示组件类 -->  
<bean id="hello" class="com.hello.HelloImpl"></bean>  
</beans> 
部署完成后,到这里一个简单的helloworld就完成了。
 =============================分界线========================================
       IoC容器的代表就是org.springframework.beans包中的 BeanFactory接口,BeanFactory接口提供了IoC容器最基本功能;而org.springframework.context包下的ApplicationContext接口扩展了BeanFactory,还提供了与Spring AOP集成、国际化处理、事件传播及提供不同层次的context实现 (如针对web应用的WebApplicationContext)。

容器实现一览(读取配置文件的几种方法):
  -  XmlBeanFactory:BeanFactory实现,通过了基本的IoC容器功能,课程classpath或文件系统等获取资源
     1 File file=new File("fileSystemConfig.xml");
Resource resource=new FileSystemResource(file);
BeanFactory beanFactory=new XmlBeanFactory(resource);

     2  Resource resource=new ClassPathResource("classpath.xml");
BeanFactory beanFactory=new XmlBeanFactory(resource);

 -   ClassPathXmlApplicationContext: ApplicationContext实现,从classpath获取配置文件
BeanFactory beanFactory=new ClassPathXmlApplicationContext("classpath.xml");

 -   FileSystemXmlApplicationContext: AplicationContext实现,从文件系统中获取配置文件
      BeanFactory beanFactory=new FileSystemXmlApplicationContext("fileSsytemConfig.xml");

      简单说, BeanFactory提供了IoC容器最基本功能,而 ApplicationContext 则增加了更多支持企业级功能支持。ApplicationContext完全继承BeanFactory,因而BeanFactory所具有的语义也适用于ApplicationContext。
      总结以上:读取配置文件其实就两种!分别是classpath(类路径)和文件系统中获取,而最常用的是从classpath下获取(上边标红),其他了解即可!

xml配置的结构

  一般配置文件结构如下:
	<beans>  
	    <!--导入其他配置文件的bean定义,可以放在beans下的任意位置,没有顺序关系,当然也可以把这些配置文件构造为一个数组
	       (new String[] {“config1.xml”, config2.xml})传给ApplicationContext实现进行加载多个配置文件
	    -->
	    <import resource=”resource1.xml”/>  
	    <bean id=”bean1”class=””></bean>  
	    <bean id=”bean2”class=””></bean>  
	<bean name=”bean2”class=””></bean>  
		<!--alias定义bean别名-->
	    <alias alias="bean3" name="bean2"/>  
	    <import resource=”resource2.xml”/>  
	</beans>  

bean命名  ------你知道“茴香豆”的“茴”字有几种写法吗?

      每个Bean可以有一个或多个id(或称之为标识符或名字),在这里我们把第一个id称“标识符”,其余id叫做“别名”;这些id在IoC容器中必须唯一。
      下面来看bean的id指定方式
        1 不指定id,只配置必须的全限定类名,由IoC容器为其生成一个标识,客户端必须通过接口“T getBean(Class<T> requiredType)”来获取Bean
BeanFactory beanFactory=new ClassPathXmlApplicationContext("namingBean1.xml");
HelloApi hellApi=beanFactory.getBean(HelloApi.class);
hello.sayHello();
        2 指定id,必须在IoC容器中 唯一
<bean id=” bean” class=“com.helloworld.HelloImpl”/>
		BeanFactory beanFactory=new ClassPathXmlApplicationContext("namingBean1.xml");
		HelloApi hellApi=beanFactory.getBean("Bean",HelloApi.class);
		hello.sayHello();	
       3 指定name,这样name就是“标识符”,必须在Ioc容器中 唯一;
<bean name=“bean” class=” com.hello.HelloImpl”/> 
		BeanFactory beanFactory=new ClassPathXmlApplicationContext("namingBean1.xml");
		HelloApi hellApi=beanFactory.getBean("Bean",HelloApi.class);
		hello.sayHello();
       4 指定id和name,id就是标识符,而name就是别名,必须在Ioc容器中 唯一;
<bean id=”bean1”name=”alias1” class=“com.hello.HelloImpl”/>  
<!-- 如果id和name一样,IoC容器能检测到,并消除冲突 -->  
<bean id="bean3" name="bean3" class="com.hello.HelloImpl"/>
		BeanFactory beanFactory = new ClassPathXmlApplicationContext("namingbean4.xml");  
		//根据id获取bean  
		HelloApi bean1 = beanFactory.getBean("bean1", HelloApi.class);  
		bean1.sayHello();  
		//根据别名获取bean  
		HelloApi bean2 = beanFactory.getBean("alias1", HelloApi.class);  
		bean2.sayHello();  
		//根据id获取bean  
		HelloApi bean3 = beanFactory.getBean("bean3", HelloApi.class);  
		bean3.sayHello();  
		String[] bean3Alias = beanFactory.getAliases("bean3");  
		//因此别名不能和id一样,如果一样则由IoC容器负责消除冲突  
		Assert.assertEquals(0, bean3Alias.length);  
        5 指定多个name,多个name用","、";"、""分割,第一个被用作标识符,其他的(alias1、alias2、alias3)是别名,所有标识符也必须在Ioc容器中唯一
<bean name=” bean1;alias11,alias12;alias13 alias14”  class="com.hello.HelloImpl"/>     
<!-- 当指定id时,name指定的标识符全部为别名 -->  
<bean id="bean2" name="alias21;alias22"  class="com.hello.HelloImpl"/>
		BeanFactory beanFactory =  new ClassPathXmlApplicationContext("namingbean5.xml");  
		//1根据id获取bean  
		HelloApi bean1 = beanFactory.getBean("bean1", HelloApi.class);  
		bean1.sayHello();  
		//2根据别名获取bean  
		HelloApi alias11 = beanFactory.getBean("alias11", HelloApi.class);  
		alias11.sayHello();  
		//3验证确实是四个别名         
		String[] bean1Alias = beanFactory.getAliases("bean1");  
		System.out.println("=======namingbean5.xml bean1 别名========");  
		for(String alias : bean1Alias) {  
		System.out.println(alias);  
		}  
		Assert.assertEquals(4, bean1Alias.length);  
		//根据id获取bean  
		HelloApi bean2 = beanFactory.getBean("bean2", HelloApi.class);  
		bean2.sayHello();  
		//2根据别名获取bean  
		HelloApi alias21 = beanFactory.getBean("alias21", HelloApi.class);  
		alias21.sayHello();  
		//验证确实是两个别名  
		String[] bean2Alias = beanFactory.getAliases("bean2");  
		System.out.println("=======namingbean5.xml bean2 别名========");  
		for(String alias : bean2Alias) {  
		System.out.println(alias);  
		}     
		Assert.assertEquals(2, bean2Alias.length); 
    从定义来看,name或id如果指定它们中的一个时都作为“标识符”,那为什么还要有id和name同时存在呢?这是因为当使用基于XML的 配置元数据时,在XML中id是一个真正的XML id属性,因此当其他的定义来引用这个id时就体现出id的好处了,可以利用XML解析器来验证引用的这个id是否存在,从而更早的发现是否引用了一个不存在的bean,而使用name,则可能要在真正使用bean时才能发现引用 一个不存在的bean。
     Bean命名约定:Bean的命名遵循XML命名规范,但最好符合Java命名规范,由“字母、数字、下划线组成“,而且应该养成一个良好的命名习惯, 比如采用“驼峰式”,即第一个单词首字母开始,从第二个单词开始首字母大写开始,这样可以增加可读性。
    总结:“茴香豆”的“茴”字写法虽多,但都是一个意思。id和name都能找到bean,都不能有重复,且都遵循一定命名规则(不能以数字符号打头,尽量使用字母下划线数字组合,写其他的纯自找不自在)。

实例化Bean

     Spring IoC容器则需要根据Bean定义里的配置元数据使用反射机制来创建Bean。有3种方式:构造器,静态工厂,实例化工厂方法。
     还是以上面helloword的例子来演示:
     1.构造方法,在HelloApi中加入两个构造器,一个是默认的,一个是带参的

	public class HelloImpl implements HelloApi {
		private String msg;
		public HelloImpl(){
			this.msg="Hello World! construct";
		}
		public HelloImpl(String msg){
			this.msg=msg;
		}
		@Override
		public void say() {
			System.out.println(msg);
		}
        }
	<bean name="bean1" class="com.HelloImpl"/>  
	<!-- 指定构造器参数 -->  
	     <constructor-arg index="0" value="Hello Spring!"/>  
	</bean>    

     2、使用静态工厂方式实例化Bean,使用这种方式除了指定必须的class属性,还要指定factory-method属性来指定实例化Bean的方法,而且使用静态工厂方法也允许指定方法参数,spring IoC容器将调用此属性指定的方法来获取Bean
	public class HelloApiStaticFactory {  
	    //工厂方法  
	    public static HelloApi newInstance(String message) {  
		//返回需要的Bean实例  
	        return new HelloImpl2(message);  
	    }  
	} 
静态工程写完了,下面配置bean.xml,注意要指定factory-method
	<!-- 使用静态工厂方法 -->  
	<bean id="bean2" class="com.hello.HelloApiStaticFactory" factory-method="newInstance">  
	     <constructor-arg index="0" value="Hello Spring!"/>  
	</bean> 
       3、使用实例工厂方法实例化Bean,使用这种方式不能指定class属性,此时必须使用factory-bean属性来指定工厂Bean,factory-method属性指定实例化Bean的方法,而且使用实例工厂方法允许指定方法参数,方式和使用构造器方式一样,配置如下:
	public class HelloApiInstanceFactory {  
	   public HelloApi newInstance(String message) {  
		  return new HelloImpl(message);  
	   }  
	}  
	<!-- 1、定义实例工厂Bean -->
	<bean id="beanInstanceFactory" class="com.hello.HelloApiInstanceFactory" />
	<!-- 2、使用实例工厂Bean创建Bean -->
	<bean id="bean3" factory-bean="beanInstanceFactory"
		factory-method="newInstance">
		<constructor-arg index="0" value="Hello Spring!"></constructor-arg>
	</bean>		
       这三种方式只是配置不一样,从获取方式看完全一样,没有任何不同。这也是Spring IoC的魅力,Spring IoC帮你创建Bean,我们只管使用就可以了。


DC-DC 转换器中的压电谐振器:当前状态和限制 在功率转换器应用中,居里温度较低的谐振器的 k 2和 Q M显着降低会导致效率降低,需要仔细的热处理。由于使用 PR 的功率转换器在不同的条件下运行,包括温度范围、电压偏置和功率电平,因此不可避免地会出现非线性效应,必须妥善解决这一问题,以免影响转换器的性能。等效电路模型(Butterworth Van-Dyke 或 BVD 模型)将压电谐振器在其机械谐振附近的电响应转换为一个简单电路,该电路由与由电极形成的输入电容 C 0并联的串联 RLC 动分支组成,见图图 1 还显示了阻抗与频率的关系。 阅读详情

相关推荐

Python实战:用Realsense D435和睿尔曼机械臂完成手眼标定的5个关键步骤

本文详细介绍了使用Python、Realsense D435深度相机与睿尔曼机械臂进行手眼标定的完整实战流程。文章将过程拆解为环境搭建、数据采集、核心计算、结果验证和精度优化五个关键步骤,重点剖析了数据采集的黄金法则、常见错误排查以及如何将标定结果集成到视觉抓取程序中,旨在帮助开发者实现毫米级精度的视觉引导机器人系统。

weixin_29103191的博客 321

一、Spring启动入口ContextLoadListener

一、Spring与WEB容器整合    web项目中,Spring启动是在web.xml配置监听器,如下所示:  &lt;!-- 配置Spring上下文监听器 --&gt; &lt;listener&gt; &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listen...

Albert 847

AD20.多对多工程中将某个原理图导入PCB工程

AD20将多个原理图中的一个或多个导入到PCB文件中

鬼爷杂货铺 1万+

spring项目启动过程

转载:https://www.cnblogs.com/luoluoshidafu/p/6442055.html

weixin_39312465的博客 1443

Win11右键菜单显示更多选项设置默认展开方法

在Windows 11操作系统中,用户可能会发现右键点击桌面空白处时,弹出的菜单中仅显示“显示更多选项”,而并非直接展示所有可用的选项。这对于希望快速访问特定功能的用户来说,无疑增加了一些不便。为了优化这一体验,本文将介绍两种简单的方法,帮助用户设置Win11右键菜单,使其默认展开包含的所有选项。通过上述两种方法,用户可以轻松地将Win11右键菜单设置为默认展开所有选项,从而提高工作效率和便捷性。希望这篇文章对你有所帮助!

nntxthml的博客 1万+

Window10 intel realsense D435安装并实现opencv显示realsense读取的彩色和深度数据(QT+openCV+rsD35)

(1)点击"官方指南" 来到下载页,-&gt;最新的稳定版本发布 (本人下的2.16.5,现在最新2.17.0) 不需要做开发,只要下载Intel RealSense Viewer就好,这个就是相机的可视化界面,简洁明了。对应的安装包是Intel.RealSense.Viewer.exe。 本人的毕设要用到深度图做开发,所以安装Intel.RealSense.SDK.exe,SDK...

Pabebe的博客 1万+

【Spring】ApplicationContext 一 接口梳理

【源码】Spring —— BeanFactory 解读 6前言 前言

小水牛的博客 885

武汉理工大学数据结构综合实验——连连看游戏综合实践

文章目录实验目的主要仪器设备及耗材一、实验要求二、分析与设计(非线性结构)1.数据结构的设计2.核心算法设计一条直线消子两条直线消子三条直线消子初始化游戏地图搜寻路径提示和重排3.测试用例设计4.测试效果总结 实验目的 (1)线性结构实验目的 调研连连看游戏,了解连连看游戏的功能和规则等 掌握集成开发工具VS2019的使用和C++的基础编程 了解MFC框架 了解线性结构,掌握数组的遍历、消子和胜负判断等算法 了解企业软件开发过程,应用迭代开发思路进行项目开发,养成良好的编程习惯和培养软件工程化思维 .

mo_zhe的博客 7612

Spring知识点精简版梳理(一)——概述

一、什么是Spring? 1、Spring 是轻量级的开源的 JavaEE 框架 2、Spring 可以解决企业应用开发的复杂性 3、Spring 有两个核心部分:IOC 和Aop (1) IoC:控制反转,把创建对象过程交给 Spring进行管理 (2) AOP:面向切面,不修改源代码进行功能增强 4、Spring 特点 (1) 方便解耦,简化开发 (2) Aop编程支持 (3) 方便程序测试 (4) 方便和其他框架进行整合 (5) 方便进行事务操作 (6) 降低 API开发难度 5、目前使用Sprin.

qq_35843514的博客 1万+

Tesla V100 Windows 部署实战:从驱动安装到模式切换的避坑指南

本文是一份详细的Tesla V100在Windows系统下的部署实战指南。文章从硬件组装、系统选择讲起,重点阐述了驱动安装的正确方法,并深入剖析了将计算卡从TCC模式切换至WDDM模式的诱惑与潜在陷阱。最终,作者推荐保持默认TCC模式,并提供了使用nvidia-smi命令行等稳定可靠的显卡监控方案,旨在帮助用户避开常见坑点,高效利用这张专业计算卡进行AI计算等任务。

java5的博客 1711

手把手教你学Simulink--智能控制算法的控制算法领域仿真建模实例:基于Simulink的遗传算法优化控制仿真模型

通过上述步骤,你可以设计并仿真一个基于Simulink的遗传算法优化控制模型。这种方法适用于许多复杂的优化场景,尤其是当传统方法难以找到最优解时。随着经验的积累,你可以进一步优化遗传算法的参数设置,或者结合其他智能优化技术(如粒子群优化、差分进化等)提升优化性能。

MHD0815的博客 208

Spring 事务的梳理一——事务的属性

Spring声明式事务让我们从复杂的事务处理中得到解脱。使得我们再也无需要去处理获得连接、关闭连接、事务提交和回滚等这些操作。再也无需要我们在与事务相关的方法中处理大量的try…catch…finally代码。   Spring事务机制主要包括声明式事务和编程式事务,在这篇博客中,我们主要说声明式事务的使用。   而我们在使用Spring声明式事务时,有一个非常重要的概念就是事务属性。事务属性

王勇霞 信息技术提高班九期 813

ERROR: Ignored the following yanked versions: 0.8.3, 0.10.19.dev18 的解决办法

关于这个问题,博主是在进行项目中的python依赖包安装的时候遇见的,遇到的异常:关于这个问题,是在。

Spring Boot-Common On With You 643

Spring基础梳理(一):一定要先全局掌握Spring

越活越完蛋了,看着看着现在又想梳理梳理Spring基础,搞点原始真解吧,不过技术人每个阶段看相同东西的理解都是不同的,只是现在浮躁的技术中又有多少人能够一本书啃两遍以上呢,我也一样,徜徉于业务之中,所以技术是什么,永远记住,技术是服务于业务的,架构也是同样的道理,不要为了技术而技术,为了架构而架构。

洛雪 247

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

spring 学习路线梳理(一)

控制反转的出现是为了方便代码的解藕。没有ioc的时候都需要自己去new。如果一个接口有多个实现类,每次换实现类的时候需要重新编译,现在交给spring 的容器帮助我们管理。需要什么实现类,去找spring的容器取就可以了(这个就是DI注入)。 4.获取容器,从容器中拿到spring帮我们创建的bean DI(依赖注入) 注入我们需要的类 2.在xml配置文件中定义需要注入到 service中的引用 3.查看配置后调用 运行的结果:1.在service中注入dao ,通过构造器注入2.在x

xiweihao的博客 581

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

JavaWeb框架梳理(一)——Spring基础

文章目录Spring概念Spring的IOC注入对象注解方式进行IOC/DI通过@Autowired通过@Resource对bean进行注解,完全通过注解完成注入Spring AOPAOP概念AOP 实现注解实现AOP 来源于how2j Spring概念 是一个非常强大的反转控制(IOC)框架,以帮助分离项目组件之间的依赖关系。 Spring的IOC 准备pojo Category : pac...

weixin_38719347的博客 282

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Spring宏观上简单梳理分析一

关于Spring框架,说的最多的就是IOC和AOP了,即依赖注入和切面编程。这些也是使用spring过程中要用的最基本的东西了。但是,spring是如何进行运转的呢?这是一个问题呀,我们起码应该要明白spring的工作流程。 思考:   spring常用的方式有注解和xml配置两种方式,根据我们的猜测,这两种方式殊路同归。Spring首先要做的事,就是解析xml(找到注解的类),根据解析出来的...

weixin_33861800的博客 98

Spring系列梳理一:SpringApplication入口

SpringApplication 一、场景 SpringApplication一般作为Springboot项目中的引导启动类。调用静态方法run()即可执行,我们自己项目中的启动类; 如下代码,即通过SpringApplication引导启动ShardingDbReadWriteApplication @SpringBootApplication public class ShardingDbReadWriteApplication { public static void main(String[

少年不识愁滋味 673

Spring之控制反转概念梳理(一)

Spring到底是什么,包括哪些内容(一) 先从两个代码示例开始: ⒈、正常的Java代码执行模式: ⑴、编写一个正常的Java类(包括类变量以及方法): public class HelloWorld { //消息 private String Message; //获取消息 public void getMessage() { //输出消息 System.out...

ruidianbaihuo的博客 339

Spring源码解析一(框架梳理)

整体架构   打算开始写这个系列,不为上首页,也不为博取多少关注,只有一个目的:梳理知识,扩充思路;废话不多,开始吧。第一步,大家去spring的官方github下面去下载它的源码,具体的自己谷歌,我已经下下来了,然后spring的源码分为下面几个部分:      哈哈,大家是不是有一种头晕目眩的感觉,没事,我带你来分析源码,顺便给自己也做个总结。第一步是要理清楚各个层级关系之间的依赖,我把...

weixin_33895475的博客 94

笔记:spring 执行流程梳理(一)

最近开始尝试进行源码看源码,今天线梳理下逻辑顺序,后面会在debug 看源码。 0.创建BeanFactory 1.加载xml 2.通过 beanDifinitionReader(定义一些xml的规则,样式等) 3.在BeanFactory中创建Bean定义。 4.通过增强器(BeanFactoryPostProcessor)对Bean定义精选取值等工作。 5.实例化 6.初始化(赋值,Ware接口,BeanPostProcessor) 7.最终实例化。 后面带来源码的阅读,来验证这.

u014609066的博客 275

(梳理)Spring部分用法技巧一

一、自定义异常页面 对于 404、405、500等异常状态,服务器会给出默认的异常页面,而这些异常页面一般都是英文的,且非常不友好。我们可以通过简单的方式使用自定义异常页面,并将默认状态码页面进行替换。 具体操作: 在 src/main/resources目录下再定义新的目录public/error,必须是这个目录名称。在 error 目录中定义异常页面。这些异常页面的名称必须为相应的状态码,扩展名为 html。 二、多环境选择 1、什么是多环境选择 以下两种场景下需要进行“多环境选择”。 相同代码运行在

ZQinsane的博客 322

spring cloud各组件+docker+elk实战梳理(一)

https://github.com/shenyang312/shen_cloud_platform 首先先梳理下个组件运行的流程,极其主要作用,先了解了他全部的样子,再去详细了解内部构造。 以上是spring cloud 的基本组成,接下来,我们来看看在实际项目中,各个组件是如何组成,且集成docker和ELK的呢? 整个maven结构是这样,接下来拿一个服务的配置文件举例log+...

狗蛋儿_312的博客 2511

一小时帮你梳理 Spring MVC设计模式 (1)

简介 MVC 设计不仅限于 Java Web 应用,还包括许多应用,比如前端、PHP、.NET 等语言。之所以那么做的根本原因在于解耦各个模块。 什么是MVC? MVC 是 Model、View 和 Controller 的缩写,分别代表 Web 应用程序中的 3 种职责。 模型:用于存储数据以及处理用户请求的业务逻辑。 视图:向控制器提交数据,显示模型中的数据。 控制器:根据视图提出的请求判断将请求和数据交给哪个模型处理,将处理后的有关结果交给哪个视图更新显示。 基于 Servlet 的 MVC 模式

qq_43493661的博客 346
上一篇: java最好的框架组合推荐
下一篇: spring梳理(二)
君子陌
博客等级 码龄18年 8粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值