JAVA提高(六)--- spring部分

1、IOC(控制反转,Spring Core最核心部分)

DI(依赖注入):底层类作为参数传递给上层类,实现上层对下层的“控制”。
IOC:(1)脱开、降低类之间的耦合(2)倡导面向接口编程、实施依赖倒换原则(3)提高系统可插入、可测试、可修改等特性。
方式:(一)setter:实现属性的public setter方法,让IOC容器调用注入所依赖类型的对象
(二)interface:实现特定的接口,以供IOC注入所依赖类型的对象
(三)Constructor:实现特定类型的构造函数,在创建对象时让IOC注入
(四)Annotation:基于注解,通过JAVA的注解让IOC注入
IOC容器的优势:避免在各处使用new来创建类,并且可以统一维护;创建实例的时候不需要了解其中的细节。

2、IOC的作用

在这里插入图片描述
IOC支持的功能:依赖注入;依赖检查;自动装配;支持集合;指定初始化和销毁方法;支持毁掉方法(需要实现spring接口,有侵入性)
IOC核心接口:BeanFactory;ApplicationContext。
BeanDefinition:主要用来描述Bean定义,Spring容器在启动时,会将xml或者注解里面的定义解析为Spring内部的BeanDefinition。
BeanDefinitionRegistry:提供向IOC容器注册BeanDefinition对象的方法
BeanFactory:Spring框架最核心的接口,提供IOC的配置机制;包含Bean的各种定义,以便于实例化Bean;建立Bean之间的依赖关系;Bean生命周期的控制。

Applicationcontext与BeanFactory比较:
1.BeanFactory是Spring框架的基础设施,面向Spring。Applicationcontext面向使用Spring框架的开发者。
2.Applicationcontext继承的众多接口之一就有BeanFactory,比BeanFactory具有更多的功能。如ResourcePatternResolver(能够加载资源文件)、MessageSource(能够实现国际化的功能)、ApplicationEventPublisher(注册监听器,实现监听机制)。

3、SpringIOC中的getBean方法解析

(一)转换beanName
(二)从缓存中或者工场中加载实例
(三)初始化Bean
(四)检测parentBeanFactory
(五)初始化依赖的Bean
(六)创建Bean
SpringBean的生命周期(创建):
1.实例化bean对象以及设置bean属性
2.如果通过Aware接口设置依赖关系,则注入bean对容器的依赖
3.调用BeanPostprocessor.postProcessBeforeInitainlization,在spring完成实例化之后,对实例化的bean添加自定义的处理逻辑
4.如果实现了InitializingBean接口,则调用afterPropertiesSet方法,在属性被设置之后,做一下自定义的事
5.执行定制的Bean init方法
6.调用BeanPostprocessor.postProcessAfterInitainlization,在spring完成实例化之后,对实例化的bean添加自定义操作
7.创建完成,可以使用
SpringBean的生命周期(销毁):
1.若实现了DisposableBean接口,则调用destory方法
2.若配置了destry-method属性,则调用其配置的销毁方法

4、AOP介绍

切面(Aspect):通用化功能代码的实现。业务代码和切面代码分开后,框架将变得高内聚低耦合。
织入(Weave):确保功能的完整性,切面最终合并到业务中。
目标(Target):被织入Aspect的对象
可切入的点(Join Point):可以作为切入点的机会,所有方法的执行处都可以作为切入点。
切入点(Poincut):Aspect实际被应用的Join Point,支持正则
通知(Advice):类里 的方法以及这个方法如何织入到目标方法的方式。分为:前置通知(Brfore)、后置通知(AfterReturning)、异常通知(AfterThrowing)、最终通知(After)、环绕通知(Around)。
织入的三种方式:
(一)编译时织入:代码编译时将切面融入进来。需要特殊的Java编译器,如AspectJ。
(二)类加载时织入:在Java字节码加载时把切面的字节码融合进来,需要特殊的类加载器,如AspectJ、AspectWerkz
(三)运行时织入:Spring采用的方式,通过动态代理的方式调用切面代码,实现简单,不需要特殊的加载器。

5、AOP原理

aop实现:jdkProxy和Cglib,具体使用哪一个由AopProxyFactory的AdvisedSupport决定。
默认策略:如果目标类是接口,则用jdk,否则后者。
jdkProxy:通过反射来接收被代理的类,并且要求该类必须实现一个接口。生成类时比较高效。
chlib:以继承的方式动态生成某个类的子类,通过修改字节码实现代理。在生成后执行过程比较高效。

代理模式:接口+真实实现类+代理类。
真实实现类的逻辑包含在getBean方法里,getBean方法返回的实际上是Proxy的实例,Proxy实例是spring采用JDK或者CGLIB动态生成的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值