什么是Spring?
spring是具有轻量级的IOC与AOP的一站式开发框架,用于简化企业级软件的开发。
IOC:反转控制
反转控制是什么?
将类的创建和管理权统一交给spring框架,我们需要时,直接从框架中获取即可
例如:
之前:LoginDao loginDao=new LoginDao();
Spring:LoginDao loginDao;
即省去了对象的创建
关键字:
@Component //用于创建对象类,用在model层
@Service //用于创建对象类,用在service层
@Repository //用于创建对象类,用在dao层
以上三种注解都具有创建对象的功能,只是根据扩展性不同用于不同的开发层
@Autowired //用在字段上或set方法上,若用在字段上则无需再写setter方法,spring自动生成
@Autowired
LoginDao loginDao;
若是没有关键字则我们需要添加一个set方法
public void setLoginDao(LoginDao loginDao) {
this.loginDao = loginDao;
}
关键字修饰后则不再需要上述方法代码,spring框架自动生成
AOP:面向切面编程
面向切面编程?
在我们程序员写代码时,经常会有重复的代码出现这也叫做非业务代码,因此我们可以将这非业务代码整合起来,当需要使用时调用即可。
例如:与前端互通时我们需要用到Servletrequestattributes,那么我们就将它的创建抽取出来包装,这样就省去了许多重复的Servletrequestattributes的创建,或是在mybatis框架里面,有SqlSession.permit与SqlSession.close(),这些都可以交由AOP解决。
若是需要在多个方法中加入相同的新的功能我们也能使用面向切面思想,在不改变原来代码的情况下为其添加额外功能。
面向切面关键字:
@Before //在代码执行前插入
@After //在代码执行后插入,无论是否出现异常
@Afterreturning //在代码执行后无报错插入,若报错则不插入
@Afterthrowing //不论是否报错都会在代码执行或报错后插入
@Around //方法执行前后都进行插入
一站式:
对web层的servlet进行封装开源,可以很方便地集成其他的框架
spring框架缺点:
框架是轻量级的,需要导入的配置是重量级的,需要导入大量模板化的配置
spring事务管理:
在代码运行时,后端时常会与数据库进行交互,若是在一个方法中有多个交互,运行异常时,会出现数据的信息错误更改,例如:
转账时,用户a转走1000元,用户b本该接收1000元但在期间发生运行错误,则用户a的1000元转出,用户b却未接收到。
这时就需要管理这些事务的进程,spring的事务管理也因此而来,事务的作用就是让每个用户的操作都是可靠的,每个事物的代码的状态都必须一致,要么都执行,要么都不执行从而保证信息的完整与安全。
public void save(){
loginDao.insertAdmin1();
System.out.println(10/0);
loginDao.insertAdmin2();
}
执行完第一行语句后,不会第一时间提交,执行第二行时运行出错,因此整体sql语句不向数据库做提交。若是没有第二行语句,则当该方法运行完成之后向数据库提交sql语句执行。