Java复习笔记之Spring(1)

依赖注入(Dependence Injection);
含义:把底层类作为参数传递给上层类,实现上层对下层的“控制”。

 

IOC、 DI、 DL的关系:

 

 

IOC容器的优势

答:避免在各处使用new来创建类, 并且可以做到统一维护

    创建实例的时候不需要了解其中的细节

 

Spring IOC支持的功能

   依赖注入

   依赖检查

   自动装配

   支持集合

   指定初始化方法和销毁方法

   支持回调方法

 

BeanDefinition

  主要用来描述Bean的定义

 

BeanDefinitionRegistry

  提供向IOC容器注册BeanDefinition对象的方法

 

BeanFactory: Spring框架最核心的接口

   提供IOC的配置机制

   包含Bean的各种定义,便于实例化Bean

   建立Bean之间的依赖关系

   Bean生命周期的控制

 

BeanFactory与ApplicationContext的比较

   BeanFactory 是Spring框架的基础设施,面向Spring

   ApplicationContext 面向使用Spring框架的开发者。

 

ApplicationContext的功能(继承多个接口)

  BeanFactory: 能够管理,装配Bean

  ResourcePatternResolver:能够加载资源文件

  MessgeSource:能够实现国际化等功能

  ApplicationEventPublisher:能够注册监听器,实现监听机制

 

refresh方法:

  为IOC容器以及Bean的生命周期管理提供条件

  刷新Spring上下文信息,定义Spring上下文加载流程

 

getBean方法的代码逻辑

  转换beanName

  从缓存中加载实例

  实例化Bean

  检测parentBeanFactory

  初始化依赖的Bean

  创建Bean

 

Spring Bean的作用域

   Singleton: Spring的默认作用域,容器里拥有唯一的Bean实列

   Prototype:针对每个getBean请求,容器都会创建一个Bean实列

   Request: 会为每个Http请求创建一个Bean实列

   Session: 会为每个Session创建一个Bean实例

   globalSession: 会为每个全局Http Session创建一个Bean实例,该作用域仅对Portlet有效

 

Spring Bean的生命周期:

销毁过程:

  若实现了DisposableBean接口,则会调用destroy方法

  若配置了destroy-method属性,则会调用其配置的销毁方法

 

AOP的三种织入方式:

  编译时织入:需要特殊的Java编译器,如AspectJ

  类加载时织入:需要特殊的java编译器,如AspectJ和AspectWerkz

  运行时织入:Spring采用的方式,通过动态代理的方式,实现简单

 

AOP的主要名词概念

  Aspect:通用功能的代码实现

  Target: 被织入Aspect的对象

  Join Point:可以作为切入点的机会,所有方法都可以作为切入点

  Pointcut: Aspect实际被应用在的Join Poin, 支持正则

  Advice: 类里的方法以及这个方法如何织入到目标方法的方式

  Weaving: Aop的实现过程

 

Advice的种类

  前置通知(before)

  后置通过(AfterReturning)

  异常通知(AfterThrowing)

  最终通知(After)

  环绕通知(Around)

 

AOP的实现:JdkProxy和Cglib

  由AopProxyFactory根据AdvisedSupport对象的配置来决定

  默认策略如果目标类是接口,则用JDKProxy来实现,否则使用后者

  JDKProxy的核心:InvocationHandler接口和Proxy类

  Cglib:以继承的方式动态生成目标类的代理

 

 JDKProxy: 通过Java的内部放射机制实现

 Cglib: 借助ASM实现

 发射机制在生成类的过程中比较高效

 ASM在生成类之后的执行过程中比较高效

 

Spring里的代理模式的实现

   真实实现类的逻辑包含了getBean方法里

   getBean方法返回的实际上是Proxy的实例

   Proxy实例是Spring采用JDK Proxy或CGLIB动态生成的

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值