Spring如何实现管理Bean的。
2017-09-17 15:29
921 查看
通过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对象销毁时执行
主要实现步骤:
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对象销毁时执行
相关文章推荐
- ssh整合系列博客——(3)在jsp中如何使用spring管理的bean
- Spring是如何管理Bean
- 如何取得Spring管理的bean (请用第3种方法)
- 如何在线程中获取spring 管理的bean
- 如何获得Spring容器里管理的Bean,。不论是Service层,还是实体Dao层
- spring的事务管理有几种方式实现,如何实现
- Spring MVC 教程,快速入门,深入分析――如何取得Spring管理的bean
- 如何在线程中获取spring 管理的bean
- 如何取得Spring管理的bean (请用第3种方法):
- 如何在线程中获取spring 管理的bean
- Spring4 Bean管理的注解实现
- Struts的Acion中如何取得Spring管理的bean
- Spring中如何实现Bean引用
- Spring管理bean的原理自定义实现
- spring的事务管理有几种方式实现,如何实现
- 如何让不受spring管理的类具有spring自动注入的特性.--AutowireCapableBeanFactory
- 如何取得Spring管理的bean
- spring的事务管理有几种方式实现,如何实现
- 如何取得Spring管理的bean
- Spring ProxyFactoryBean 是如何实现所有的AOP proxy都有可能转为Advised接口的?