7.谈谈spring的事务管理
spring提供的事务管理可以分为两类:编程式的和声明式的。
编程式的,比较灵活,但是代码量大,存在重复的代码比较多;
声明式的比编程式的更灵活。
编程式
主要使用transactionTemplate。省略了部分的提交,回滚,一系列的事务对象定义,需注入事务管理对象.
声明式
使用TransactionProxyFactoryBean:PROPAGATION_REQUIRED ,readOnly
围绕Poxy的动态代理 能够自动的提交和回滚事务
8.简单说一下spring框架中bean的生命周期和作用域
1)生命周期
在配置 元素,通过 init-method 指定Bean的初始化方法,
通过 destroy-method 指定Bean销毁方法
<bean id="lifeCycleBean" class="cn.itcast.spring.d_lifecycle.LifeCycleBean" init-method="setup" destroy-method="teardown"></bean>
需要注意的问题:
destroy-method只对scope="singleton"有效
销毁方法,必须关闭ApplicationContext对象(手动调用),才会被调用
2)作用域
scope属性:指对象的作用范围
singleton
默认值,单例的,立即加载
prototype
多利的,延迟加载
request
WEB项目中,Spring创建一个Bean的对象,将对象存到request域中
session
WEB项目中,Spring创建一个Bean的对象,将对象存入到session域中
global session
WEB项目中,应用在Portlet环境,如果没有Portlet 环境那么globalSession相当于session
取值为singleton时
实例化个数:1个
实例化时机
当Spring核心文件被加载时,实例化配置的Bean实例
生命周期
当使用对象时,创建新的对象实例
只要容器在,就一直活着
当应用卸载,销毁容器时,对象被销毁
取值为prototype时
实例化个数:多个
Bean的实例化时机
当调用getBean()方法时实例化Bean
生命周期
当使用对象时,创建新的对象实例
只要对象在使用中,就一直活着
当对象长时间不用时,被Java的垃圾回收器回收了
9. AOP是什么?
AOP(Aspect-Oriented Programming): 面向切面编程
代理的两种方式:
静态代理:
针对每个具体类分别编写代理类;
针对一个接口编写一个代理类;
动态代理:
针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类
AOP的主要原理:动态代理实现:有两种:JDK Proxy和Cglib,Spring规定对于有接口的类用JDK Proxy,对于无接口和抽象类用Cglib,虽然Cglib均可以代理,但是Cglib复杂,效率低。但是Cglib有例外,就是代理的类中不能是final修饰的类或者类中有final方法。
主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。
10.AOP和OOP的区别
面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术[1]发展到一定阶段后的产物。面向对象是以功能来划分问题,而不是步骤。
面向过程是一种以过程为中心的编程思想。“面向过程”也可称之为“面向记录”编程思想,他们不支持丰富的“面向对象”特性(比如继承、多态),并且它们不允许混合持久化状态和域逻辑。就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
例子:围棋
面向对象:1.黑白双方,这两个的行为是一模一样的2.棋盘系统,负责绘制画面3.规则系统,负责判断输赢
面向过程:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。