教育行业A股IPO第一股(股票代码 003032)

全国咨询/投诉热线:400-618-4000

spring创建动态代理对象的过程介绍

更新时间:2021年03月18日11时27分 来源:传智教育

Spring动态代理创建对象过程分为几个步骤

Spring动态代理创建对象过程可分为以下四个步骤:

1)通过实现InvocationHandler接口创建自己的调用处理器 IvocationHandler handler = new InvocationHandlerImpl(...);

2)通过为Proxy类指定ClassLoader对象和一组interface创建动态代理类

Class clazz = Proxy.getProxyClass(classLoader,new Class[]{...});

3)通过反射机制获取动态代理类的构造函数,其参数类型是调用处理器接口类型

Constructor constructor = clazz.getConstructor(new Class[]{InvocationHandler.class});

4)通过构造函数创建代理类实例,此时需将调用处理器对象作为参数被传入

Interface Proxy = (Interface)constructor.newInstance(new Object[] (handler));

为了简化对象创建过程,Proxy类中的newProxyInstance方法封装了2~4,只需两步即可完成代理对象的创建。

生成的ProxySubject继承Proxy类实现Subject接口,实现的Subject的方法实际调用处理器的invoke方法,而invoke方法利用反射调用的是被代理对象的的方法(Object result=method.invoke(proxied,args))cglib动态代理是生成被代理类的子类,并覆盖其中方法进行增强。

Spring的生命周期:

1)先实例化Bean工厂后处理器(Bean工厂处理器的实例化是先于bean的实例化的)

2)实例化Bean后处理器(BeanPostProcessor)

3)实例化感知的bean后处理器适配器(InstantiationAwareBeanPostProcessorAdapter)

4)执行Bean构造器,bean正式实例化

在实例化之前会先去调用postProcessBeforeInstantiation方法;

在实例化之后就去调用postProcessAfterInitialization方法;

在这里实例化就是调用postProcessPropertyValues去为所要实例化的bean注入属性。

5)调用BeanNameAware接口

6)调用BeanFactoryAware接口

7)调用Bean后处理器的postProcessBeforeInstantiation方法对属性进行更改

8)调用InitializingBean.afterPropertiesSet() ,检查是否已经set所有必要属性,之后调用的init-method属性指定的初始化方法

9)调用Bean后处理器的postProcessAfterInitialization对属性进行更改

10)调用后处理器适配器的postProcessAfterInitialization

11)容器初始化成功,使用bean

12)调用DiposibleBean接口的DiposibleBean.destory()


猜你喜欢:

Spring如何管理事务以及隔离级别?

Spring框架的优点有哪些?Spring框架优势汇总

Spring AOP实现原理和常见代理的区别

手动实现IOC容器:SpringIOC底层实现原理

传智教育高级Java工程师培训课程

0 分享到:
和我们在线交谈!