Spring基础知识

什么是Spring?

spring是具有轻量级的IOCAOP的一站式开发框架,用于简化企业级软件的开发。

IOC:反转控制

反转控制是什么?

将类的创建和管理权统一交给spring框架,我们需要时,直接从框架中获取即可

例如:

之前:LoginDao loginDao=new LoginDao();

Spring:LoginDao loginDao;

即省去了对象的创建

关键字:

java 复制代码
@Component	//用于创建对象类,用在model层

@Service	//用于创建对象类,用在service层

@Repository	//用于创建对象类,用在dao层

以上三种注解都具有创建对象的功能,只是根据扩展性不同用于不同的开发层

java 复制代码
@Autowired	//用在字段上或set方法上,若用在字段上则无需再写setter方法,spring自动生成
java 复制代码
@Autowired
LoginDao loginDao;

若是没有关键字则我们需要添加一个set方法

java 复制代码
public void setLoginDao(LoginDao loginDao) {    
​this.loginDao = loginDao;
​}

关键字修饰后则不再需要上述方法代码,spring框架自动生成

AOP:面向切面编程

面向切面编程?

在我们程序员写代码时,经常会有重复的代码出现这也叫做非业务代码,因此我们可以将这非业务代码整合起来,当需要使用时调用即可。

例如:与前端互通时我们需要用到Servletrequestattributes,那么我们就将它的创建抽取出来包装,这样就省去了许多重复的Servletrequestattributes的创建,或是在mybatis框架里面,有SqlSession.permit与SqlSession.close(),这些都可以交由AOP解决。

若是需要在多个方法中加入相同的新的功能我们也能使用面向切面思想,在不改变原来代码的情况下为其添加额外功能

面向切面关键字:

java 复制代码
@Before	//在代码执行前插入

@After	//在代码执行后插入,无论是否出现异常

@Afterreturning	//在代码执行后无报错插入,若报错则不插入

@Afterthrowing	//不论是否报错都会在代码执行或报错后插入

@Around	//方法执行前后都进行插入

一站式:

对web层的servlet进行封装开源,可以很方便地集成其他的框架

spring框架缺点:

框架是轻量级的,需要导入的配置是重量级的,需要导入大量模板化的配置

spring事务管理:

在代码运行时,后端时常会与数据库进行交互,若是在一个方法中有多个交互,运行异常时,会出现数据的信息错误更改,例如:

转账时,用户a转走1000元,用户b本该接收1000元但在期间发生运行错误,则用户a的1000元转出,用户b却未接收到。

这时就需要管理这些事务的进程,spring的事务管理也因此而来,事务的作用就是让每个用户的操作都是可靠的,每个事物的代码的状态都必须一致,要么都执行,要么都不执行从而保证信息的完整与安全。

javascript 复制代码
public void save(){
       loginDao.insertAdmin1();
       System.out.println(10/0);
       loginDao.insertAdmin2();
}

执行完第一行语句后,不会第一时间提交,执行第二行时运行出错,因此整体sql语句不向数据库做提交。若是没有第二行语句,则当该方法运行完成之后向数据库提交sql语句执行。

相关推荐
寻星探路2 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
陌上丨4 小时前
Redis的Key和Value的设计原则有哪些?
数据库·redis·缓存
曹牧4 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
AI_56785 小时前
AWS EC2新手入门:6步带你从零启动实例
大数据·数据库·人工智能·机器学习·aws
ccecw5 小时前
Mysql ONLY_FULL_GROUP_BY模式详解、group by非查询字段报错
数据库·mysql
JH30735 小时前
达梦数据库与MySQL的核心差异解析:从特性到实践
数据库·mysql
数据知道5 小时前
PostgreSQL 核心原理:如何利用多核 CPU 加速大数据量扫描(并行查询)
数据库·postgresql
爬山算法5 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
kfyty7255 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎5 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven