互联网轻量级框架整合之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结构体处理异常信息

相关推荐
@CLoudbays_Martin119 小时前
CDN是否能有效检测并且同时防御Ddos 和 CC 攻击?
java·服务器·网络·数据库·git·数据库开发·时序数据库
知彼解己9 小时前
字符串大数相加:从初稿到优化的思路演进
java·开发语言·算法
拾忆,想起10 小时前
Redisson 分布式锁的实现原理
java·开发语言·分布式·后端·性能优化·wpf
焰火199910 小时前
[Java][SpringBoot]AspectJ切面配合自定义注解实现权限校验
java
野生程序员y10 小时前
Spring DI/IOC核心原理详解
java·后端·spring
往事随风去10 小时前
Java 中的 Consumer 与 Supplier 接口
java·面试·响应式编程
北城以北888811 小时前
Java高级编程--XML
xml·java·开发语言·intellij-idea
SXJR11 小时前
Java mp4parser 实现视频mp4 切割
java·python·音视频
冬天vs不冷11 小时前
Java基础(十一):关键字final详解
java·开发语言
上官浩仁11 小时前
springboot maven 多环境配置入门与实战
java·spring boot·maven