Spring如何实现管理Bean的。
来源:互联网 发布:英雄联盟盒子mac版 编辑:程序博客网 时间:2024/05/19 12:37
通过ClassXmlPathApplicationContext类实现,ClassXmlPathApplicationContext ctx = new ClassXmlPathApplicationContext("xxx.xml")
主要实现步骤:
1)加载xml配置文件,读取里面的id和对应的class属性值.一般有多个存到list当中 <bean id="ds" class="xxx.xxx.xxx.BasicDataSource" />
2)从list当中读取对应id和class,通过反射实例化的bean,存放到map当中.
3)最后从map中根据id获取对应的bean对象 ctx.getClass(id,class);
在第2步中,主要在ClassXmlPathApplicationContext 类的构造函数中执行两个方法,
1)读取xml文件
2) 实例化bean
1)遍历bean节点------list
遍历xml文件的节点,将<bean id="ds" class="xxx.xxx.xxx.BasicDataSource" />属性值存到实体类MyBeans中,
将bean放入list
for (Element element : eles) {
String id = element.attributeValue("id");
String cn = element.attributeValue("class");
//自定义实体bean,保存配置文件中id和class
MyBeans beans = new MyBeans(id, cn);
beanlist.add(beans);
}
2)实例化bean-----map
遍历list,获取每一个bean,然后获得id和通过反射创建class对应的实例作为键值对存放在map中。
for (MyBeans bean : beanlist) {
try {
if (bean.getClassName() != null && !"".equals(bean.getClassName())) {
//反射机制,看之前的博客
beanMap.put(bean.getId(), Class.forName(bean.getClassName()).newInstance());
}
} catch (Exception e) {
e.printStackTrace();
}
在第1步中,关于spring管理bean的三种方式:
1.使用类构造器实例化 (90%以上都是使用这种)
<bean id=“orderService" class="cn.itcast.OrderServiceBean"/>
2.使用静态工厂方法实例化
<bean id="personService" class="cn.itcast.service.OrderFactory" factory-method="createOrder"/>
public class OrderFactory {
public static OrderServiceBean createOrder(){
return new OrderServiceBean();
}
}
3.使用实例工厂方法实例化:
首先要实例化工厂
<bean id="personServiceFactory" class="cn.itcast.service.OrderFactory"/>
<bean id="personService" factory-bean="personServiceFactory" factory-method="createOrder"/>
public class OrderFactory {
public OrderServiceBean createOrder(){
return new OrderServiceBean();
}
}
spring管理bean的生命周期:
1: bean的创建: 如果我们默认的scope配置为Singleton的话, bean的创建实在Spring容器创建的时候创建; 如果scope的配置为Prototype的话,bena的创建是在getBean的时候创建的。 同样我们还可以在<bean>的配置中配置lazy-init = ”true“是bean的创建在getBean时。
2: 我们有时候可能在bean完成之后可能想要打开一些资源。 我们可以配置init-method="init" init方法在调用了类的默认构造函数之后执行
3: 如果我们想在bean销毁时,释放一些资源。 我们可以配置destroy-method="destroy" destroy方法在bean对象销毁时执行
- Spring如何实现管理Bean的。
- 如何取得Spring管理的bean
- 如何取得Spring管理的bean
- 如何取得Spring管理的bean
- 如何取得Spring管理的bean
- 如何取得Spring管理的bean
- 如何取得Spring管理的bean
- 如何取得Spring管理的bean
- Spring管理bean的原理自定义实现
- spring的bean管理
- Spring的bean管理
- spring的bean管理
- Spring Bean的管理
- Spring是如何管理Bean
- Spring是如何管理Bean
- Spring是如何管理Bean
- spring--filter如何注入 spring管理的bean(54)
- Spring实现bean生命周期管理
- 【Socket编程】Python用udp实现简易ping
- NKOJ-4239 追捕游戏
- java 中常见 类型转换 -全面-String ,char ,char[],int 之间的转换。
- Git basic construction
- python字典的简单用法
- Spring如何实现管理Bean的。
- 大型网站架构技术一览
- hihocoder #1114 扫雷一
- 二叉查找树、平衡二叉树、红黑树、B-/B+树性能对比
- Java多线程笔记二(synchronized的使用以及实现原理)
- 图文混排
- 扩展二进制数
- gcc指定链接库路径后还是找不到库文件
- 寻找k个数组的最小区间