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对象销毁时执行