很久没写博客了,其实spring,hibernate学了有很久了,今天就一起整理了。
spring篇:
spring是一个非常流行的开源框架,spring的底层就是IoC(Inversion of Control)和AOP(Aspect Oriented Programming)。
其中IoC即控制反转,也就是通常所说的依赖注入,可以理解为如下:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器 (在 Spring 框架中是 IOC 容器) 负责将这些联系在一起。 下一个最高级抽象是 BeanFactory 接口,它是工厂设计模式的实现,允许通过名称创建和检索对象。BeanFactory 也可以管理对象之间的关系。
BeanFactory 支持两个对象模型:
- 单态 模型提供了具有特定名称的对象的共享实例,可以在查询时对其进行检索。Singleton 是默认的也是最常用的对象模型。对于无状态服务对象很理想。
- 原型 模型确保每次检索都会创建单独的对象。在每个用户都需要自己的对象时,原型模型最适合。
bean 工厂的概念是 Spring 作为 IoC 容器的基础。IoC 将处理事情的责任从应用程序代码转移到框架。Spring 框架使用 JavaBean 属性和配置数据来指出必须设置的依赖关系。
而AOP即面向切面编程,它是一种编程技术,AOP 的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块中。在 AOP 方式中,可以将日志服务,事务处理,权限管理模块化,并以声明的方式将它们应用到需要日志、事务、权限的组件上。当然,优势就是 Java 类不需要知道日志、事务、权限服务的存在,也不需要考虑相关的代码。所以,用 Spring AOP 编写的应用程序代码是松散耦合的。AOP的各个增强模块是通过动态代理织入的(关于织入有三种:编译期织入,类装载期织入,动态代理织入)其中动态代理又有两种:jdk动态代理、cglib动态代理。jdk代理必须为被代理类抽取一个接口(因为创建代理类的时候必须传入一个接口)。但是简单的业务表的操作也要抽取各种接口?jdk代理显然黔驴技穷,cglib作为替代者就填补了这个空缺。