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.jarbeans.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容器。