Spring手撸源码系列-实现Bean对象初始化和销毁方法

目录

1.工程目录

2.xml类图

3.代码实现

3.1 xml方式配置初始化和销毁方法实现

3.2 接口方式定义初始化和销毁方法


这一节比上一节轻松,主要关注的就是可以在操作Bean的过程中去调用用户自定义的初始方法和结束方法,这样用户就可在bean实例化后的时机做自定义初始化的业务逻辑,也可在整个Bean操作完成后进行销毁操作的自定义业务逻辑方法,和上节的自定义修改Bean对象是一个意思

本章代码地址:GitHub - dufGIT/spring-sourcecode

 目录为:bean-init-destory

就像在xml中配置了init-method以及destroy-method后就会在Bean一系列中去操作对应的方法,所以第一知道要改动的就是需要在bean定义中(BeanDefinition)添加两个属性,initMethodName,destroyMethodName,这样才能够知道xml中的初始化方法以及销毁方法要调用的是什么方法名。

// 初始化方法名称
private String initMethodName;
// 销毁方法名称
private String destroyMethodName;

 除此之外我们bean是定义完了,但是怎么放入beanDefinition里后供系统使用呢,所以在bean加载解析时还要加入如下操作

            // 从xml解析出来需要初始化调用的方法名称设置
            beanDefination.setInitMethodName(initMethod);
            // 从xml解析出来需要调用销毁方法名称的设置
            beanDefination.setDestroyMethodName(destroyMethodName);

此外,因为是从xml中解析出来的方法名称,如果真的调用方法还要借助反射,通过beanDefinitin里的beanClass对象传递方法名来获取方法,再调用invoke的操作来实现调用初始化或自定义销毁方法。

1.工程目录

├─src
│  ├─main
│  │  ├─java
│  │  │  └─com
│  │  │      └─spring
│  │  │          └─sourcecode
│  │  │              │  SourcecodeApplication.java
│  │  │              │  
│  │  │              └─springframework
│  │  │                  │  BeanDefinition.java
│  │  │                  │  BeanFactory.java
│  │  │                  │  
│  │  │                  ├─beans
│  │  │                  │  │  BeansException.java
│  │  │                  │  │  PropertyValue.java
│  │  │                  │  │  PropertyValues.java
│  │  │                  │  │  
│  │  │                  │  └─factory
│  │  │                  │      │  BeanFactory.java
│  │  │                  │      │  ConfigurableListableBeanFactory.java
│  │  │                  │      │  DisposableBean.java
│  │  │                  │      │  HierarchicalBeanFactory.java
│  │  │                  │      │  InitializingBean.java
│  │  │                  │      │  ListableBeanFactory.java
│  │  │                  │      │  
│  │  │                  │      ├─config
│  │  │                  │      │      AutowireCapableBeanFactory.java
│  │  │                  │      │      BeanDefinition.java
│  │  │                  │      │      BeanFactoryPostProcessor.java
│  │  │                  │      │      BeanPostProcessor.java
│  │  │                  │      │      BeanReference.java
│  │  │                  │      │      ConfigurableBeanFactory.java
│  │  │                  │      │      SingletonBeanRegistry.java
│  │  │                  │      │      
│  │  │                  │      ├─support
│  │  │                  │      │      AbstractAutowireCapableBeanFactory.java
│  │  │                  │      │      AbstractBeanDefinitionReader.java
│  │  │                  │      │      AbstractBeanFactory.java
│  │  │                  │      │      BeanDefinitionReader.java
│  │  │                  │      │      BeanDefinitionRegistry.java
│  │  │                  │      │      CglibSubclassingInstantiationStrategy.java
│  │  │                  │      │      DefaultListableBeanFactory.java
│  │  │                  │      │      DefaultSingletonBeanRegistry.java
│  │  │                  │      │      DisposableBeanAdapter.java
│  │  │                  │      │      InstantiationStrategy.java
│  │  │                  │      │      SimpleInstantiationStrategy.java
│  │  │                  │      │      
│  │  │                  │      └─xml
│  │  │                  │              XmlBeanDefinitionReader.java
│  │  │                  │              
│  │  │                  ├─context
│  │  │                  │  │  ApplicationContext.java
│  │  │                  │  │  ConfigurableApplicationContext.java
│  │  │                  │  │  
│  │  │                  │  └─supprot
│  │  │                  │          AbstractApplicationContext.java
│  │  │                  │          AbstractRefreshableApplicationContext.java
│  │  │                  │          AbstractXmlApplicationContext.java
│  │  │                  │          ClassPathXmlApplicationContext.java
│  │  │                  │          
│  │  │                  ├─core
│  │  │                  │  └─io
│  │  │                  │          ClassPathResource.java
│  │  │                  │          DefaultResourceLoader.java
│  │  │                  │          FileSystemResource.java
│  │  │                  │          Resource.java
│  │  │                  │          ResourceLoader.java
│  │  │                  │          UrlResource.java
│  │  │                  │          
│  │  │                  └─util
│  │  │                          ClassUtils.java
│  │  │                          
│  │  └─resources
│  │          application.properties
│  │          spring.xml
│  │          
│  └─test
│      └─java
│      
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值