博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring中BeanFactory的两大步骤
阅读量:7091 次
发布时间:2019-06-28

本文共 1838 字,大约阅读时间需要 6 分钟。

hot3.png

BeanFactory是Spring的核心,我们可以把它理解成一个黑匣子,把相关的乱七八糟的bean配置信息传给它,它通过努力的分析,最终传给我们可以直接使用的Java对象。它的处理过程分为两大步骤:
1,容器的启动,主要完成的是Bean信息的搜集,用于以后实例化Bean。
2,Bean对象的实例化。
Bean信息最常用的配置文件便是XML文件,XML文件的优点不必多言。
com.mysql.jdbc.Driver

保存为applicationContext.xml  构造BeanFactory可以用如下方式:
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();		XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);		reader.loadBeanDefinitions("classpath:applicationContext.xml");		DataSource ds = (DataSource)beanFactory.getBean("dataSource");		System.out.println(ds);

上述代码中beanFactory其实进行了两大步,首先加载BeanDefinition,然后实例化Bean,内部是采用大致如下的方式做的:
AbstractBeanDefinition dataSourceBeanDefinition = new RootBeanDefinition(BasicDataSource.class,true);		DefaultListableBeanFactory factory = new DefaultListableBeanFactory();		factory.registerBeanDefinition("dataSource", dataSourceBeanDefinition);		DataSource ds = (DataSource)factory.getBean("dataSource");		BeanWrapper dsBeanWrapper = new BeanWrapperImpl(ds);		dsBeanWrapper.setPropertyValue("driverClassName", "com.mysql.jdbc.Driver");		dsBeanWrapper.setPropertyValue("url","jdbc:mysql://localhost:3306/oa?characterEncoding=gb2312");		dsBeanWrapper.setPropertyValue("username","root");		dsBeanWrapper.setPropertyValue("password", "root");		dsBeanWrapper.setPropertyValue("maxActive",100);		dsBeanWrapper.setPropertyValue("maxIdle", 30);		dsBeanWrapper.setPropertyValue("maxWait", 1000);		dsBeanWrapper.setPropertyValue("defaultAutoCommit",true);		dsBeanWrapper.setPropertyValue("removeAbandoned", true);		System.out.println(ds.getConnection());

先读取BeanDefinition,再实例化bean,设置属性可通过BeanWrapperImpl进行设置,比一般的反射技术要好的多。

转载于:https://my.oschina.net/u/218421/blog/37764

你可能感兴趣的文章
js地址多选实现,居住地,户口,职业,行业多选2
查看>>
嵌套datalist对应分类列表
查看>>
PAT 1019
查看>>
qemu通过命令行直接引导linux内核启动
查看>>
ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛
查看>>
获取上传视频 flv 的视频长度和缩略图
查看>>
文件复制
查看>>
springmvc 跳转页面或者返回json
查看>>
多维数组排序
查看>>
linux vi操作
查看>>
针对discuz系统网站设置301重定向完成全站域名的完美更换操作
查看>>
LVS简介与使用
查看>>
“栈”(stack)
查看>>
JavaScript中的script标签浅析
查看>>
rdb转为rdf
查看>>
[Mugeda HTML5技术教程之19]制作可定制贺卡
查看>>
如何创建自定义ASP.NET MVC5脚手架模板?
查看>>
【OpenGL】法线变换详解(Normal Transform)[转]
查看>>
强化学习入门第四讲 时间差分方法
查看>>
typedef和define混用产生的错误
查看>>