首页技术文章正文

Spring动态代理创建对象过程分为几个步骤?Spring的生命周期介绍

更新时间:2021年03月18日 08时58分10秒 来源:黑马程序员

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()


猜你喜欢:
Java中发送状态码有哪些方法?

微服务架构有哪些功能?

MyBatis框架操作数据库有哪些步骤?

依赖注入是什么?依赖注入介绍

黑马程序员高级Java软件工程师培训课程



分享到:
在线咨询 我要报名
和我们在线交谈!