1. spring 的思想:
IOC: 控制反转, 原来我们自己实例化的对象交给spring容器来实例化,这时候对象的实例化权利就进行了反转;
DI: 依赖注入, spring框架负责创建bean对象时候,动态的将依赖对象注入到bean组件中
AOP: 面向切面编程, 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术
主要功能: 日志记录,性能统计,安全控制,事物处理,异常处理等;AspectJ 是一个面向切面的框架,他扩展了java语言;
2. applicationcontext是扩展beanfactory接口,
3. 当在配置文件中声明一个bean的时候,必须要提供无参构造器;
4. spring 的 p 和 c名称空间,是虚拟的名称空间,
嵌入在spring的内核中的, p是set注入, c是构造器注入
例如: <bean p:name=”张三”>
5. spel 表达式类似与ognl或el表达式,他可以提供程序运行时
构造复杂表达式来完成对象属性存储和方法调用;
例如: <property value=”#{person.getAge()+10}”>
6. @Value @Autowired 它们可以修饰属性,也可以修饰 setter 方法,如果写在属性上,就不需要提供 setter 方法
@autowired 和 qualifier 一起使用,就可以根据名称注入
@resource(name=””) 根据名称注入
7. OOP: 面向对象编程, 是业务处理过程中,对对象及其属性,行为的抽象封装,以获得更加清晰的逻辑单元划分面向名词领域的;
AOP: 面向切面编程, 是业务处理逻辑中的一个步骤或方法,进行切面提取,以获得逻辑过程中各个部分的低耦合的隔离效果
面向动词领域的
8. AOP中相关术语:
目标对象 target: 只需要被增强的代理对象
连接点: 指的是对象中哪些被拦截的方法
切点: 指的是所有的连接点中哪些具有某些特征的方法进行切入
֪ͨ: 分为前置,后置,异常通知等, 是指对这些方法进行增强操作
切面: 切点和通知组成了切面
织入: 指的是对代理对象进行增强的过程, 织入可以在编译期,
类装载期,运行期等;AspectJ是静态织入,spring是动态织入
代理对象: 指的是被织入后的对象,产生的结果代理对象;
9. AOP; 静态AOP: 是指AspectJ实现的AOP,他是将切面代码直接编译到java类文件中
动态AOP: 是指将切面代码动态织入实现的AOP 技术为
JDK提供的动态代理和CGLIB(动态字节码增强技术)
10.动态代理的invoke方法的参数(proxy代理对象,调用方法的Method对象,调用方法的参数 )
Cglib可以没有接口,也可以有接口的类动态代理
spring 采用的是哪一种动态机制:
如果目标对象,有接口,优先使用 jdk 动态代理
如果目标对象,无接口,使用 cglib 动态代理
11.spring AOP 传统编程:支持增强的通知有五种:
前置通知,后置通知,环绕通知,异常通知,引介通知
Spring整合AspectJ框架通知有六种多了一个最终通知,不管是否出现异常,都会执行;
注解方式 @Aspect来声明切面在类上面就可以,@before(切点表达式)前置通知,在spring配置文件中开启注解自动扫描
12.spring jdbc Template
只需要使用 JdbcTemplate 的 update 方法就可以执行 insert update delete 操作
JdbcTemplate.update(“sql语句”) queryForObject(“查询sql语句”)
13. spring 事物管理: 优点:
1. 提供一致的对于不同的事务管理的 API
2. 支持声明式事务管理(重点)
3. 编程事务管理(在开发中应用比较少)
4. 优秀的整合与 Spring 的数据访问
Spring事物管理主要提供了三个接口来完成
1. PlatformTransactionManger
事物管理器,可以选择相关平台(hibernate,jpa…)
2. TransactionDefinition
定义了事物的相关信息,例如: 隔离, 传播,超时,只读 Spring使用后台数据库默认的隔离级别
3.Transactonstatus 主要描述事物运行的具体状态
14. 声明式事物管理
声明事物控制,基于AOP对目标进行代理,添加around环绕通知;不具有代码侵略性;
配置文件步骤: 1.配置声明式事物管理器 2.配置通知, 3配置切面
15. 解决nosession问题:
1.不使用延迟加载
2. 手动将延迟加载初始化hibernate.initialize(延迟对象)
3.使用spring提供的一个openSessionInviewFilter来解决
配置在struts2的配置文件前面