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语句执行。

相关推荐
forestsea20 分钟前
Java虚拟机面试题:内存管理(中)
java·开发语言
茶本无香25 分钟前
Java异步编程中的CompletableFuture介绍、常见错误及最佳实践
java·future·异步·常见错误
写代码的小王吧36 分钟前
【安全】Java幂等性校验解决重复点击(6种实现方式)
java·linux·开发语言·安全·web安全·网络安全·音视频
麓殇⊙44 分钟前
springMVC--Controller配置总结
java·spring
字节源流1 小时前
【spring Cloud Netflix】OpenFeign组件
java·spring boot·后端
AntBlack1 小时前
都说 SpringBoot 启动慢 ,你知道慢在哪里吗?
java·spring boot·面试
Hi_Lyn1 小时前
MySQL表的增删改查基础版
数据库·mysql
Feng.Lee1 小时前
如何判断数据来源缓存还是数据库
数据库·缓存
暮湫2 小时前
javaWeb axios
java·web
qq_340474022 小时前
6.1 python加载win32或者C#的dll的方法
java·python·c#