SpringIOC和AOP(七)

IOC

IOC详解地址

Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想

  • 谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。

  • 为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。

1.spring IOC支持的功能
  1. 依赖注入
  2. 依赖检查
  3. 自动转配
  4. 支持集合
  5. 指定初始化方法和销毁方法
2.BeanFactory: Spring框架最核心的接口
  1. 提供IOC的配置机制
  2. 包含Bean的各种定义,便于实例化Bean
  3. 建立Bean之间的依赖关系
  4. Bean生命周期的控制

子容器可以访问父容器的Bean,父容器不能访问子容器的Bean(SpringMVC中业务层、持久层存在父容器中,Bean位于子容器中)

@Autowired 按byType自动注入
@Resource默认按 byName自动注入罢了
3.BeanFactory与ApplicationContext的比较
  1. BeanFactory 是pring框架的基础设施,面向Spring
  2. ApplicationContext面向Spring框架的开发者

如果Spring容器是汽车,BeanFactory就是汽车的发动机,ApplicationContext就是完整的汽车

4.ApplicationContext的功能
  1. BeanFactory:能够管理、装配Bean
  2. ResourcePatternResolver:能够加载资源wenj
  3. MessageSource:能够实现国际化等功能
  4. ApplicationEventPublisher:能够注册监听器,实现监听机制

5.getBean方法的代码逻辑
  1. 转换beanName
  2. 从缓存中加载实例
  3. 实例化Bean
  4. 检测parentBeanFactoy
  5. 初始化依赖的Bean
  6. 创建Bean
6.SpringBean的作用域
  1. singleton:Spring的默认作用域,容器里拥有唯一的Bean实例
  2. prototype:针对每个getBean请求,容器都会创建一个Bean实例
  3. request:会为每个http请求创建一个Bean实例
  4. session:会为每个session创建一个Bean实例
  5. globalSession:会为每个全局Http Session创建一个Bean实例,该作用域仅对Portlet有效
7.SpringBean的生命周期

销毁过程
  • 若实现了DisposableBean接口,则会调用destroy方法
  • 若配置了destry-method属性,则会调用其配置的销毁方法
AOP

关注点分离:不同的问题交给不同的部分去解决

  • 面向切面编程AOP正是此种技术的体现
  • 通用化功能代码的实现,对应的就是所谓的切面(Aspect)
  • 业务功能代码和切面代码分开后,架构将变得高内聚低耦合
  • 确保功能的完整性:切面最终需要被合并到业务中(Weave)
AOP的三种织入方式
  • 编译时织入:需要特殊的Java编译器,如AspectJ
  • 类加载时织入:需要特殊的Java编译器,如AspectJ和AspectWerkz
  • 运行时织入:Spring采用的方式,通过动态代理的方式,实现简单
AOP的主要名词概念
  • Aspect:通用功能的代码实现
  • Target:被织入Aspect的对象
  • Join Point:可以作为切入点的机会,所有方法都可以作为切入点
  • Pointcut:Aspect实际被应用在的Join Point,支持正则
  • Advice:类里的方法以及这个方法如何织入到目标方法的方式
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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值