剑指Offer(更新)之SSM框架(一)

Spring是什么?
本质就是一个工厂 - 生产对象/管理对象
一站式框架

Spring核心模块:
IOC:控制反转,将对象的创建/管理交给Spring容器/工厂
Spring创建对象的三种方式
构造器
静态工厂
工厂方法
通过 DI技术 来给对象注入依赖
set方法注入
构造器注入
p命名空间注入
spel表达式注入

bean: scope - 对象的生命周期
singleton - 单例 程序运行期间,只有一个对象的类
容器启动时创建,容器关闭时销毁
prototype - 多例 Struts2-Action对象必须多例
request
session
init-method
destroy-method

#### 1.Spring 在SSM中起什么作用?

  • Spring:轻量级框架
  • 作用:Bean工厂,用来管理Bean的生命周期和框架集成。
  • 两大核心:
    1.IOC/DI(控制反转/依赖注入) :把dao依赖注入到service层,service层反转给action层,Spring顶层容器为BeanFactory
    2.AOP:面向切面编程

2.Spring的事务?

  • 编程式事务管理:编程方式管理事务,极大灵活性,难维护。
  • 声明式事务管理:可以将业务代码和事务管理分离,用注解和xml配置来管理事务。

3.IOC在项目中的作用?

作用:Ioc解决对象之间的依赖问题,把所有Bean的依赖关系通过配置文件或注解关联起来,降低了耦合度。

4.Spring的配置文件中的内容?

  • 开启事务注解驱动
  • 事务管理器
  • 开启注解功能,并配置扫描包
  • 配置数据库
  • 配置SQL会话工厂,别名,映射文件
  • 不用编写Dao层的实现类

5.Spring下的注解?

注册:@Controller @Service @Component
注入:@Autowired @Resource
请求地址:@RequestMapping
返回具体数据类型而非跳转:@ResponseBody

6.Spring DI的三种方式?

  • **构造器注入:**通过构造方法初始化
<constructor-arg index="0" type="java.lang.String" value="宝马"></constructor-arg>
  • **setter方法注入:**通过setter方法初始化
<property name="id" value="1111"></property>
  • 接口注入

7.Spring主要使用了什么模式?

**工厂模式:**每个 Bean 的创建通过方法
**单例模式:**默认的每个 Bean 的作用域都是单例
**代理模式:**关于 AOP 的实现通过代理模式

8.IOC,AOP的实现原理?

  • IOC:通过反射机制生成对象注入
  • AOP:动态代理

9.Spring的AOP原理:

  • 通过预编译方式和运行期动态代理方式实现程序功能的统一维护的一种技术
  • 主要功能:日志记录、性能统计、安全控制、事务处理、异常处理等等
  • AOP实现方式
    1、预编译:AspectJ
    2、运行期动态代理(JDK动态代理、CGLib动态代理):SpringAOP、JbossAOP
  • AOP几个相关概念
  • 动态代理:
    JDK动态代理只提供接口的代理,不支持类的代理。核心InvocationHandler接口和Proxy类,InvocationHandler 通过invoke()方法反射来调用目标类中的代码,动态地将横切逻辑和业务编织在一起;接着,Proxy利用 InvocationHandler动态创建一个符合某一接口的的实例, 生成目标类的代理对象。
  • CGLib动态代理
    如果代理类没有实现 InvocationHandler 接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成指定类的一个子类对象,并覆盖其中特定方法并添加增强代码,从而实现AOP。CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那么它是无法使用CGLIB做动态代理的。

10.Spring bean的生命周期

BeanNameAware
|
BeanFactoryAware
|
BeanPostProcessor
|
InitializingBean、init-method
|
DisposableBean、destroy-method(已经到底啦)

下面以BeanFactory为例,说明一个Bean的生命周期活动

  • Bean的建立, 由BeanFactory读取Bean定义文件,并生成各个实例
  • Setter注入,执行Bean的属性依赖注入
  • BeanNameAware的setBeanName(), 如果实现该接口,则执行其setBeanName方法
  • BeanFactoryAware的setBeanFactory(),如果实现该接口,则执行其setBeanFactory方法
  • BeanPostProcessor的processBeforeInitialization(),如果有关联的processor,则在Bean初始化之前都会执行这个实例的processBeforeInitialization()方法
  • InitializingBean的afterPropertiesSet(),如果实现了该接口,则执行其afterPropertiesSet()方法
  • Bean定义文件中定义init-method
  • BeanPostProcessors的processAfterInitialization(),如果有关联的processor,则在Bean初始化之前都会执行这个实例的processAfterInitialization()方法
  • DisposableBean的destroy(),在容器关闭时,如果Bean类实现了该接口,则执行它的destroy()方法
  • Bean定义文件中定义destroy-method,在容器关闭时,可以在Bean定义文件中使用“destory-method”定义的方法

你可能感兴趣的:(剑指Offer)