互联网轻量级框架整合之Spring框架I

基于全面文章所讲Web容器、Servlet容器的概念和使用,再来理解Spring框架就水到渠成,Spring框架的广泛应用来自于它的理念而并非技术本身,其两大核心即控制反转(Inversion of Control)和面向切面变成(Aspect Oriented Programming)

Inversion of Control(IOC)

前面的文章详细讲过Web容器和Servlet容器,充分理解并实操之后,再来理解IoC就水到渠成,因为IoC本身也是容器

互联网轻量级框架整合之JavaEE基础I
互联网轻量级框架整合之JavaEE基础II

在Spring世界中,它认为一切Java资源都是JavaBean,这里暂时无需深究Bean实际是个什么东西,语言世界里名词概念无非就是个标签,SpringIoC里装载了各种Bean,IoC容器管理这些Bean的构建、事件、行为及其之间的关系;类比Servlet容器就较容易理解了,在Servlet容器里也存在这诸多Servlet实例,这些实例或通过注解声明或通过web.xml配置,同时有这些实例的初始化、销毁等动作;只是在SpringIoC管理对象和其关系不是人为构建的,而是由SpringIoC通过描述构建的,换句话说SpringIoC通过描述来完成对象及对象之间的关系的构建,而这便是IoC的理念

IoC容器里的对象构建是被动的,而非像以往的对象构建,人为的去new一个出来,在IoC容器里,向其注入描述信息而得到Bean,控制权在IoC容器中,它根据注入的描述信息找到构建对象所需资源给使用者,这边是控制反转的概念

以往的对象构建方式

java 复制代码
Socket socket = new Socket1();
user.setSocket(socket);
user.useSocket();
java 复制代码
Socket socket= new Socket2();
user.setSocket(socket);
user.useSocket();

SpringIoC构建对象方式

xml 复制代码
<bean id="socket" class="Socket1">
<bean id="user" class="xxx.User">
	<property name="socket" ref="socket"/>
</bean>

试想第一个问题:如果需要构建1000个同一个接口下的同类对象,如上两个方式哪个更可取

试想第二个问题:创建了1000个同类对象,明天有500个不用了,但又需要构建新增的200个对象,如上两个方式哪个更可取

试想第三个问题:两个方式代码的耦合哪个更好,开发效率哪个更高

这便是SpringIoC的魅力所在

SpringAOP面向切片编程

假设有一个产品订单付费的业务流程,在开发的时候可能需要处理的几个维度包括订单生成--->订单审批--->财务审批等等,然而每一步如果审批通过还好,如果审批未通过,那么为了保证数据一致性之前的操作产生的数据结果就要作废,重新处理,在以往的编程中我们似乎不不得写代码进行处理,而有了SpringAOP之后,它解决了此类问题,在SpringAOP实现的数据库事务管理中,以异常信息作为消息,默认情况下只要Spring接收到了异常信息(可以通过Spring的配置修改),就会将数据库事务回滚,而取代了人工实现

java 复制代码
@Transactional
private void proceed(Order order){
	boolean pflag = productionDept.isPass(order);
	if(pflag){
		if(financialDept.isOverbuget(order)){
			throw new RuntimeException("超出预算");
		}
	}
}

在此例代码中,对方法proceed()使用了@Transactional注解,有了这个注解,当遇到了异常信息之后,Spring就会自己处理数据库事务的回滚甚至包括数据库的开闭也会自动完成,而无需再去写复杂的try...catch...finally结构体处理异常信息

相关推荐
牛马baby13 分钟前
Springboot 自动装配原理是什么?SPI 原理又是什么?
java·spring boot·后端
胡尔摩斯.20 分钟前
SpringCloud企业级常用框架整合--下篇
spring·spring cloud·docker
小小深35 分钟前
了解JVM
java·jvm
Sunlight_77741 分钟前
第五章 SQLite数据库:1、SQLite 基础语法及使用案例
java·linux·服务器·jvm·数据库·tcp/ip·sqlite
JhonKI1 小时前
【从零实现高并发内存池】内存池整体框架设计 及 thread cache实现
java·redis·缓存
何似在人间5751 小时前
SpringAI+DeepSeek大模型应用开发——4 对话机器人
java·机器人·大模型应用开发·spring ai
-曾牛2 小时前
【LangChain4j快速入门】5分钟用Java玩转GPT-4o-mini,Spring Boot整合实战!| 附源码
java·开发语言·人工智能·spring boot·ai·chatgpt
kfepiza2 小时前
HttpSessionListener 的用法笔记250417
java·笔记·servlet·tomcat
冬天vs不冷2 小时前
SpringBoot条件注解全解析:核心作用与使用场景详解
java·spring boot·python
考虑考虑2 小时前
Springboot捕获feign抛出的异常
spring boot·后端·spring