一、spring概述
1. spring是什么
2. spring发展历程
3. spring的优势
4. spring能帮我们做什么
②.Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。
③.Spring 能非常简单的帮我们管理数据库事务。
④.Spring 还提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板来方便数据库访问。
⑤.Spring 还提供与第三方Web(如Struts1/2、JSF)框架无缝集成,而且自己也提供了一套Spring MVC框架,来方便web层搭建。
⑥.Spring 能方便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)。
5. spring体系结构
二、ioc的概念和作用
1. 耦合的概念
不使用spring之前代码的写法:
public class AccountServiceImpl implements IAccountService {
private IAccountDao accountDao = new AccountDaoImpl();
} 注册驱动的两种写法:
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Class.forName("com.mysql.jdbc.Driver");存在问题:创建合作对象的主动权在自己手上,自己需要哪个合作对象,就主动去创建,创建合作对象的主动权和创建时机是由自己把控的,而这样就会使得对象间的耦合度高了,并且是紧密耦合在一起。
如何解耦:应该做到,编译期不依赖,运行时才依赖。
2. IoC 是什么
IoC:Inverse of Control(控制反转)
- 读作 “反转控制”,更好理解,不是什么技术,而是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由Spring框架来管理。
- 正控:若要使用某个对象,需要自己去负责对象的创建
- 反控:若要使用某个对象,只需要从 Spring 容器中获取需要使用的对象,不关心对象的创建过程,也就是把创建对象的控制权反转给了Spring框架
传统程序设计都是主动去创建相关对象然后再组合起来:
当有了IOC的容器后,在客户端类中不再主动去创建这些对象了
3. IoC 和DI
DI—Dependency Injection,即“依赖注入”:由容器在运行期动态的将某个依赖关系注入到组件之中。依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。
ioc 控制反转,指将对象的创建权,反转到Spring容器
DI 依赖注入,指Spring创建对象的过程中,将对象依赖属性通过配置进行注入
4. IoC 如何实现
- 读取标注或者配置文件
- 使用反射的API,基于类名实例化对应的对象实例
- 将对象实例,查看是否有依赖对象,创建依赖实例,注入到目标对象
三、aop概念和作用
1. 一个例子
//转账
public void transfer() {
1、查询两个账户信息
2、转出账户减钱,更新转出账户
3、转入账户加钱,更新转入账户
}解决方法:给转账方法增加事务控制。
//转账
public void transfer() {
try {
TransactionManager.beginTransaction();
1、查询两个账户信息
2、转出账户减钱,更新转出账户
3、转入账户加钱,更新转入账户
TransactionManager.commit();
} catch (Exception e) {
TransactionManager.rollback();
} finally {
TransactionManager.release();
}
}新的问题:
2. AOP概念
AOP (Aspect Oriented Programming),面向切面编程。
首先,在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能。
- 所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务
- 所谓的周边功能,比如性能统计,日志,事务管理等等
周边功能在 Spring 的面向切面编程AOP思想里,即被定义为切面
在面向切面编程AOP的思想里面,核心业务功能和切面功能分别独立进行开发,然后把切面功能和核心业务功能 "编织" 在一起,这就叫AOP。
3. AOP 的作用及优势
AOP能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。这样的做法,对原有代码毫无入侵性,把和主业务无关的事情,放到代码外面去做。
4. AOP实现方式
什么是代理模式(Proxy)
定义:给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用
在代理模式中,是需要代理对象和目标对象实现同一个接口
使用代理模式的原因就是,在不改变目标对象方法的情况下对方法进行增强,比如,我们希望对方法的调用增加日志记录,或者对方法的调用进行拦截,等等...
四、spring中的aop
1. AOP相关术语
2. 通知的执行顺序问题
通知类型的执行先后顺序问题:前置通知>最终通知>后置通知
建议使用环绕通知