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

相关推荐
皮皮林5513 小时前
IDEA 源码阅读利器,你居然还不会?
java·intellij idea
卡尔特斯7 小时前
Android Kotlin 项目代理配置【详细步骤(可选)】
android·java·kotlin
白鲸开源7 小时前
Ubuntu 22 下 DolphinScheduler 3.x 伪集群部署实录
java·ubuntu·开源
ytadpole7 小时前
Java 25 新特性 更简洁、更高效、更现代
java·后端
纪莫7 小时前
A公司一面:类加载的过程是怎么样的? 双亲委派的优点和缺点? 产生fullGC的情况有哪些? spring的动态代理有哪些?区别是什么? 如何排查CPU使用率过高?
java·java面试⑧股
JavaGuide8 小时前
JDK 25(长期支持版) 发布,新特性解读!
java·后端
用户3721574261358 小时前
Java 轻松批量替换 Word 文档文字内容
java
白鲸开源8 小时前
教你数分钟内创建并运行一个 DolphinScheduler Workflow!
java
Java中文社群9 小时前
有点意思!Java8后最有用新特性排行榜!
java·后端·面试
代码匠心9 小时前
从零开始学Flink:数据源
java·大数据·后端·flink