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

相关推荐
Theodore_10223 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
冰帝海岸5 小时前
01-spring security认证笔记
java·笔记·spring
世间万物皆对象5 小时前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了5 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
小二·6 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic6 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
懒洋洋大魔王6 小时前
RocketMQ的使⽤
java·rocketmq·java-rocketmq
武子康6 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神7 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
qq_327342737 小时前
Java实现离线身份证号码OCR识别
java·开发语言