Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2860157
  • 博文数量: 471
  • 博客积分: 7081
  • 博客等级: 少将
  • 技术积分: 5369
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 21:55
文章分类

全部博文(471)

文章存档

2014年(90)

2013年(69)

2012年(312)

分类: 系统运维

2012-03-07 16:49:06

Spring是一个开源的控制反转(Inversion of Control ,IoC)和面向切面(AOP)的容器框架.它的主要目得是简化企业开发.
所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。

所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。


为何要使用Spring??
  • 可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当我们使用容器管理事务时,开发人员就不再需要手工控制事务.也不需处理复杂的事务传播。
  • 容器提供单例模式支持,开发人员不再需要自己编写实现代码。
  • 容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。
  • 容器提供的众多辅作类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate。
  • Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,这样更便于应用的开发

spring是一个容器,所以开发过程是:先实例化容器,再实例化bean

1.实例化容器
实例化Spring容器常用的两种方式:
由于文件系统会不一样,所以在实际中使用第一种方法,可通过数组传进多个配置文件。
方法一:
在类路径下寻找配置文件来实例化容器
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});
PersonService personService1 = (PersonService)ctx.getBean("personService");
只是一个配置文件 (看它的构造方法)
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
 bean的名字(推荐用这个,如果没有特殊字符), 也属于xml文件元素的,必须唯一,而且不能含有特殊字符name可以含有特殊字符,也必须唯一的

方法二:
在文件系统路径下寻找配置文件来实例化容器
ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[]{“d:\\beans.xml“});

2.实例化Bean
当spring容器启动后,因为spring容器可以管理bean对象的创建,销毁等生命周期,所以我们只需从容器直接获取Bean对象就行,而不用编写一句代码来创建bean对象。从容器获取bean对象的代码如下:
ApplicationContext ctx = new ClassPathXmlApplicationContext(“beans.xml”);
OrderService service = (OrderService)ctx.getBean("personService");


三种实例化bean的方式
1.使用类构造器实例化(一般都用这种)
2.使用静态工厂方法实例化
public class OrderFactory {
public static OrderServiceBean createOrder(){
return new OrderServiceBean();
}
}
3.使用实例工厂方法实例化:
public class OrderFactory {
public OrderServiceBean createOrder(){
return new OrderServiceBean();
}
}
Bean的作用域
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns=""
  3.        xmlns:xsi=""
  4.        xsi:schemaLocation="
  5.            /spring-beans-2.5.xsd">
  6.           <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean" lazy-init="false"
  7.           init-method="init" destroy-method="destory">
  8.               
  9.           </bean>
  10. </beans>
bean 默认是单例,默认情况下会在容器启动时初始化bean,但我们可以指定Bean节点的lazy-init=“true”来延迟初始化bean,这时候,只有第一次获取bean会才初始化bean。由构造方法可以看到
1、lazy-init 默认false,这样容器启动时就可以看到Bean初始化的信息
2、scope="prototype",则为原型模式,会创建新的Bean
3、 init-method=”methodName",指定bean初始化时执行的方法,比如数据库的连接
4、 destroy-method=“methodName“,  指定bean摧毁时执行的方法,比如关闭数据库的连接 

阅读(487) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~