Spring框架
轻量级框架,javaEE的春天当前主流框架
目标
使现有技术更加易用,推进编码最佳实践
内容
IOC容器
AOP实现
数据访问支持
>简化JDBC/ORM框架
>声明式事务
Web集成
Spring设计理念
Spring是面向Bean的编程
Spring两大核心技术
控制反转(IoC:Inversion of Control)/依赖注入(DI:Dependency Injection)
面向切面边恒(AOP:Aspect Oriented Programming)
Beans->Core->Context->Beans
Spring的优点
低侵入式设计
独立于各种应用服务器
用来注入特性将组建关系透明化,降低了耦合度
面向切面编程特性允许将通用任务进行集中式处理
与第三方框架的良好整合
控制反转/依赖注入
将组件对象的控制权从代码本身转移到外部容器
组件化的思想:坟利关注点,使用接口,不在关注实现
依赖的注入:将组件的构建和使用分开
目的:解耦合。实现每个组件时只关注组建内部的事情
要点:明确定义组件间的接口
建立Spring项目步骤
1.添加Spring到项目中
2.编写配置文件(哪些类要生成对象,属性赋值)
3.获取Bean实例,调用功能方法
1目标类:方法
2增强类:增强方法
3配置文件:pointcut–>execution()
aspect:
Aspectweaver.jar
Aspectjrt.jar
Aopallance.jar
JoinPorint:调用目标方法,参数,类
proceedingJoinPoint,proceed()
最终运行:目标方法和增强方法合在一起运行
代理模式;代理类和被代理类实现共同的接口(或继承),代理类中存有指向被代理类的索引,实际执行时通过调用代理类的方法、实际执行的是被代理类的方法
而AOP,是通过动态代理实现的
Jdk动态代理(只能对实现了接口的类生成代理,而不能针对类)
Gglib代理(针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法(继承))
将要生成的对象在配置文件中配置
Spring框架启动时,加载IOC容器,IOC生成所有的对象,默认单例模式
单例的好处:
节约资源
AOP相关术语
增强处理(Advice)
前置增强
后置增强
环绕增强,异常抛出增强,最终增强等类型
切入点(Pointcut)
连接点(Join Point)
切面()
目标对象
AOP代理
织入
增强处理:
既可以在目标方法之前增强动作,也可以在执行目标方法之后织入增强动作
它可以决定目标方法在什么时候执行,如何执行,甚至可以完全阻止目标目标方法的执行
它可以改变执行目标方法的参数值,也可以改变执行目标方法之后的返回值
当需要改变目标方法的返回值时,只能使用Around方法
虽然Around功能强大,单通常需要在线程安全的环境下使用,因此,如果使用普通的Before、AfterReturing增强方法
增强方法就可以解决的事情
环绕增强:
POJO增强:
控制反转,就是将对象的创建转移给框架,不需要去new,只需要通过配置或者注解来让他知道从哪里入手。
不用在编写创建对象的代码和维持其复杂的依赖的关系
定义一个接口,可以方便更改其实现类,或者注入需要的属性
工厂模式:根据我们提供的我们所需要的对象实例的描述,为我们返回所需要的产品
1.产品的规范
2.产品
3.工厂
4.客户端/调用
根据构造方法赋值<constructor-arg name="" value=""/>
构造注入
p:命名空间的特点
设值注入:
构造注入:
注入不同数据类型:
设值注入
以下实例:
List 数组 都是用list标签
异常抛出增强
异常抛出增强的特点
在目标方法抛出异常时织入增强处理
可拔插的异常处理方案
最终增强的特点
无论方法是否抛出异常,都会在目标方法最后织入增强处理,即:该增强都会得到执 行
类似于异常处理机制中finally块的作用,一般用于释放资源
可以为各功能模块提供统一的,可拔插的处理方案
aop:after元素:定义最终增强
环绕增强的特点
目标方法前后都可织入增强处理
功能最强大的增强处理
可获取或修改目标方法的参数,返回值,可对它进行异常处理,甚至可以决定目标方法是否执行
aop:around元素:定义环绕增强
常用增强处理类型
Spring AOP配置元素
使用注解实现
注解方式将Bean的定义信息和Bean实现类结合在一起,Spring提到的注解有
@Component:实现Bean组件的定义
@Rrpository:用于标注DAO类
@Service:用于标注业务类
@Controller:用于标注控制器类