一、Spring的概述
Spring 是完全面向接口的设计,降低程序耦合性,主要是事务控制并创建bean实例对象。在ssh整合时,充当黏合剂的作用。IOC(Inversion of Control) 控制反转/依赖注入,又称DI(Dependency Injection) (依赖注入)
二、IOC的作用
产生对象实例,所以它是基于工厂设计模式的
三、Spring IOC的注入
- 通过属性进行注入,通过构造函数进行注入
- 注入对象数组
- 注入List集合
- 注入Map集合
- 注入Properties类型
四、Spring IOC 自动绑定模式
- 可以设置@Autowired按以下方式进行绑定
- 按byType只要类型一致会自动寻找
- 按byName自动按属性名称进行自动查找匹配
五、AOP 面向方面(切面)编程
主要应用于日志记录,性能统计,安全控制,事务处理(项目中使用的)等方面。
六、 Spring中实现AOP技术
在Spring中可以通过代理模式来实现AOP
- 静态代理:一个接口,分别有一个真实实现和一个代理实现。
- 动态代理:通过代理类的代理,接口和实现类之间可以不直接发生联系,而可以在运行期(Runtime)实现动态关联。
动态代理有两种实现方式,可以通过jdk的动态代理实现也可以通过cglib
来实现而AOP默认是通过jdk的动态代理来实现的。jdk的动态代理必须要有
接口的支持,而cglib不需要,它是基于类的。
七、Spring AOP事务的描述:
在spring-common.xml里通过aop:config里面先设定一个表达式,设定对service里那些方法 如:对add* ,delete*,update*等开头的方法进行事务拦截。我们需要配置事务的传播(propagation=“REQUIRED”)特性,通常把增,删,改以外的操作需要配置成只读事务(read-only=“true”).只读事务可以提高性能。之后引入tx:advice,在tx:advice引用 transactionManager(事务管理),在事务管理里再引入sessionFactory,sessionFactory注入 dataSource,最后通过aop:config 引入txAdvice。
八、String实现ioc控制反转描述:
a对象想完成一个完整的功能,要先为自己的b类属性实例化,而在MVC模式中,这种现象很常见,为了简化这种实例化的工作,spring容器就产生了,它可以统一管理这种实例化频繁的操作,就是说这种本来应由自己实例化的工作交给Spring容器去控制了,也就是说控制反转了,实现的方案之一是在上述a类中提供一个关于b类的setter方法,这个方法会被Spring容器控制。
九、Spring事务的实现方式和实现原理:
- 划分处理单元:IOC
由于spring解决的问题是对单个数据库进行局部事务处理的,具体的实现首先用spring中的IOC划分了事务处理单元。并且将对事务的各种配置放到了ioc容器中(设置事务管理器,设置事务的传播特性及隔离机制 - AOP拦截需要进行事务处理的类:
Spring事务处理模块是通过AOP功能来实现声明式事务处理的,具体操作(比如事务实行的配置和读取,事务对象的抽象),用TransactionProxyFactoryBean接口来使用AOP功能,生成proxy代理对象,通过TransactionInterceptor完成对代理方法的拦截,将事务处理的功能编织到拦截的方法中。 读取ioc容器事务配置属性,转化为spring事务处理需要的内部数据结构(TransactionAttributeSourceAdvisor),转化为TransactionAttribute表示的数据对象。 - 对事物处理实现(事务的生成、提交、回滚、挂起):
spring委托给具体的事务处理器实现。实现了一个抽象和适配。适配的具体事务处理器:DataSource数据源支持、hibernate数据源事务处理支持、JDO数据源事务处理支持,JPA、JTA数据源事务处理支持。这些支持都是通过设计PlatformTransactionManager、AbstractPlatforTransaction一系列事务处理的支持。为常用数据源支持提供了一系列的TransactionManager。 - PlatformTransactionManager实现了TransactionInterception接口,让其与TransactionProxyFactoryBean结合起来,形成一个Spring声明式事务处理的设计体系。