Spring核心学习(2)管理Bean的生命周期
来源:互联网 发布:apache index.html 编辑:程序博客网 时间:2024/05/22 14:29
前导:开始学习Spring核心思想,通过一个山寨精简版Spring代码结合学习。
内容:1. 抽象BeanFactory-面向接口更易拓展BeanFactory-面向接口更易拓展。 2. 在AbstractBeanFactory内部初始化Bean。
这里的BeanDefinition相比上一个更加丰富,多了BeanDefinition包含的Bean的Class的信息,这里我们不在注册前就把Bean实例化给BeanDefinition,而是延迟到注册的时候才实例化Bean给BeanDefinition。
BeanDefinition:
package step2.core;public class BeanDefinition {private Object bean;private Class beanClass;private String beanClassName;public BeanDefinition() {}public Object getBean() {return bean;}public void setBean(Object bean) {this.bean = bean;}public Class getBeanClass() {return beanClass;}public void setBeanClass(Class beanClass) {this.beanClass = beanClass;}public String getBeanClassName() {return beanClassName;}public void setBeanClassName(String beanClassName) {this.beanClassName = beanClassName;try {this.beanClass = Class.forName(beanClassName);} catch (ClassNotFoundException e) {e.printStackTrace();}}}
BeanFactory:
public interface BeanFactory {Object getBean(String name);void registerBeanDefinition(String name, BeanDefinition beanDefinition);}
AbstractBeanFactory:
public abstract class AbstractBeanFactory implements BeanFactory{private Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<String, BeanDefinition>();@Overridepublic Object getBean(String name) {return beanDefinitionMap.get(name).getBean();}@Overridepublic void registerBeanDefinition(String name,BeanDefinition beanDefinition) {Object bean = doCreateBean(beanDefinition);beanDefinition.setBean(bean);beanDefinitionMap.put(name, beanDefinition);}/** * 初始化bean * @param beanDefinition * @return */ protected abstract Object doCreateBean(BeanDefinition beanDefinition);}
public class AutowireCapableBeanFactory extends AbstractBeanFactory{@Overrideprotected Object doCreateBean(BeanDefinition beanDefinition) {try {Object bean = beanDefinition.getBeanClass().newInstance();return bean;} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}return null;}}
public class HelloWorldService { public void helloWorld(){ System.out.println("Hello World! from step2"); }}
public class BeanFactoryTest {@Testpublic void test() {// 1.初始化beanBeanFactory beanFactory = new AutowireCapableBeanFactory();// 2.注入beanBeanDefinition beanDefinition = new BeanDefinition();beanDefinition.setBeanClassName("step2.test.HelloWorldService");beanFactory.registerBeanDefinition("helloWorldService", beanDefinition);// 3.获取beanHelloWorldService helloWorldService = (HelloWorldService)beanFactory.getBean("helloWorldService");helloWorldService.helloWorld();}}
0 0
- Spring核心学习(2)管理Bean的生命周期
- Spring学习历程---管理bean的生命周期
- Spring学习笔记(1):Bean的生命周期管理
- Spring 管理bean的生命周期
- spring Bean的生命周期管理
- Spring管理Bean的生命周期
- spring学习笔记2---bean的生命周期
- spring学习(-)关于bean的生命周期
- Spring学习笔记之管理Bean的生命周期
- spring管理bean生命周期
- Spring bean 生命周期管理
- spring管理bean生命周期
- Spring Bean 生命周期管理
- 10.Spring学习笔记_管理Bean的生命周期(by尚硅谷_佟刚)
- Spring Bean LifeCycle 被spring管理的Bean的生命周期
- Spring管理的Bean的生命周期
- Spring管理的Bean的生命周期
- 自己动手写spring(五) bean的生命周期管理
- jquery中的innerHTML和value函数获取textarea内容
- C++ STL priority_queue<> 用法
- 图论- hdu5222 Exploration
- Android BroadcastReceiver的使用方法
- Tomcat的性能调校
- Spring核心学习(2)管理Bean的生命周期
- 关于JavaBean的运行
- clayui界面库收集 转自http://www.cppblog.com/clayui/
- python TCP传输文件
- MongoDB主从复制与分片技术,和运维技术的状态查询
- 基于MINA框架快速开发网络应用程序
- return false误区onclick|submit=fn(return false)不能阻止默认行为
- C# 泛型数组
- 数据结构:最小生成树(Kruskal)