spring学习,实例化bean的方式及Bean的作用域

今天继续学习Spring,黎老师对Spring中比较重要的部分都进行了讲解,实例化Spring容器的方式,实例化bean的方式,Bean的作用域等。并进行了举例,通过对Spring和以前项目的学习,在项目中可以使用Sping,使项目功能的实现更简单,遵循MVC模式。

使用Spring需要的jar   可以到http://www.springsource.org/download下载spring,然后进行解压缩,在解压目录中找到下面jar文件,拷贝到类路径下

dist\spring.jar

lib\jakarta-commons\commons-logging.jar

如果使用了切面编程(AOP),还需要下列jar文件

lib/aspectj/aspectjweaver.jar和aspectjrt.jar

lib/cglib/cglib-nodep-2.1_3.jar

如果使用了JSR-250中的注解,如@Resource/@PostConstruct/@PreDestroy,还需要下列jar文件

lib\j2ee\common-annotations.jar

beans.xml 的配置模板

<?xml version="1.0" encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

.....

</beans>

该配置模版可以从spring的参考手册或spring的例子中得到。配置文件的取名可以任意,文件可以存放在任何目录下,但考虑到通用性,一般放在类路径下。

实例化Spring容器常用的两种方式:

方法一:

在类路径下寻找配置文件来实例化容器

ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});

方法二:

在文件系统路径下寻找配置文件来实例化容器

ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[]{“d:\\beans.xml“});

       一般使用第一种方式,Spring的配置文件可以指定多个,可以通过String数组传入。

当spring容器启动后,因为spring容器可以管理bean对象的创建,销毁等生命周期,所以我们只需从容器直接获取Bean对象就行,而不用编写一句代码来创建bean对象。从容器获取bean对象的代码如下:

ApplicationContextctx=newClassPathXmlApplicationContext(“beans.xml”);

OrderService service = (OrderService)ctx.getBean("personService");

     三种实例化bean的方式:

1.使用类构造器实例化

<beanid=“orderService"class="cn.itcast.OrderServiceBean"/>

2.使用静态工厂方法实例化

<beanid="personService"class="cn.itcast.service.OrderFactory"factory-method="createOrder"/>

publicclassOrderFactory{

publicstaticOrderServiceBeancreateOrder(){

returnnewOrderServiceBean();

}

}

3.使用实例工厂方法实例化:

<beanid="personServiceFactory"class="cn.itcast.service.OrderFactory"/>

<beanid="personService"factory-bean="personServiceFactory"factory-method="createOrder"/>

publicclassOrderFactory{

publicOrderServiceBeancreateOrder(){

returnnewOrderServiceBean();

}

}

Bean的作用域

.singleton(单例)

在每个SpringIoC容器中一个bean定义只有一个对象实例。默认情况下会在容器启动时初始化bean,但我们可以指定Bean节点的lazy-init=“true”来延迟初始化bean,这时候,只有第一次获取bean会才初始化bean。如:

<beanid="xxx"class="cn.itcast.OrderServiceBean"lazy-init="true"/>

如果想对所有bean都应用延迟初始化,可以在根节点beans设置default-lazy-init=“true“,如下:

<beansdefault-lazy-init="true“...>

实际应用中不把这个属性设置为true.

.prototype(原型)

每次从容器获取bean都是新的对象。每次调用getBean方法,都获取新的实例。

调用调用getBean方法时bean才实例化

.request

.session

.globalsession

在配置文件中指定Bean的初始化方法和销毁方法

<beanid="xxx"class="cn.itcast.OrderServiceBean"init-method="init"destroy-method="close"/>

Bean实例化后,就会执行init方法,Spring容器通过反射机制来调用。

AbstractApplicationContextctx=newClassPathXmlApplicationContext("beans.xml");

ctx.close();//正常关闭spring容器。

相关推荐