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

来源:互联网 发布:灵魂的重量21克 知乎 编辑:程序博客网 时间:2024/05/29 18:25

       今天继续学习Spring,黎老师对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"?>
<beans xmlns="
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对象的代码如下:
ApplicationContext ctx = new ClassPathXmlApplicationContext(“beans.xml”);
OrderService service = (OrderService)ctx.getBean("personService");

     三种实例化bean的方式:
1.使用类构造器实例化
<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();
 }
}

Bean的作用域
  .singleton (单例)
   在每个Spring IoC容器中一个bean定义只有一个对象实例。默认情况下会在容器启
动时初始化bean,但我们可以指定Bean节点的lazy-init=“true”来延迟初始化bean,这时候,只有第一次获取bean会才初始化bean。如:
 <bean id="xxx" class="cn.itcast.OrderServiceBean" lazy-init="true"/>
如果想对所有bean都应用延迟初始化,可以在根节点beans设置default-lazy-init=
“true“,如下:
<beans default-lazy-init="true“ ...>
实际应用中不把这个属性设置为true.
.prototype (原型)
 每次从容器获取bean都是新的对象。每次调用getBean方法,都获取新的实例。
 调用调用getBean方法时 bean才实例化
.request
.session
.global session
在配置文件中指定Bean的初始化方法和销毁方法
<bean id="xxx" class="cn.itcast.OrderServiceBean" init-method="init" destroy-
method="close"/>
Bean实例化后 ,就会执行init方法, Spring容器通过反射机制来调用。
AbstractApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
ctx.close();//正常关闭spring容器。

原创粉丝点击