标签:
DAY01
Spring的作用与优势
Spring用来整合软件开发中的各种框架,提供组件之间松耦合的平台,目的是将耦合度降为最低,即解耦.我们在使用spring框架时,主要使用spring的两个特性:Ioc和aop.
Spring是一个开源框架.
Spring为javaee应用提供了一个轻量级的解决方案.
Spring提倡”最少侵入”.
Spring是一个优秀的mvc框架.
基于依赖注入的核心机制,基于aop的声明式事务管理.
Spring核心模块
Dao,orm,jee,web,aop,core
Spring 容器实例化:
Spring通过beanFactory管理和配置bean,在spring里,任何的java对象,java组件都被当成bean处理.
BeanFactory创建并负责管理spring bean的上下文的生命周期.并建立对象之间的依赖性.
org.springframework.beans.facotry.xmlXmlBeanFactory是beanFactory的实现类,在XMLBeanFactory中,以xml结构方式描述对象及对象之间的依赖关系.
创建BeanFactory实例时,必须提供spring容器管理bean的详细配置信息,相应的xml文件作为参数传入.
Spring容器实例化的方式:
BeanFactory
XMLBeanFactory-->Resource-->ClassPathResource\FileSystemResource
ApplicationContext
ClassPathXmlApplicationContext(推荐)
FileSystemXmlApplicationContext
Bean对象创建的时机
默认是随着容器创建,可以使用lazy-init=true(在调用getBean创建)延迟加载.
Bean对象创建模式
默认是单例,可以使用scope属性改变.
Singleton:单例,每次调用getBean返回同一个.
Prototype:原型,每次调用getBean返回一个新的.
Request:仅限于web环境
Session:仅限于web环境
Global session:仅限于web环境.
Bean对象想初始化和销毁
Init-method属性用于指定初始化方法
Destroy-method属性用于指定销毁方法,仅适用于singleton模式.
DI依赖注入
Di(dependency injection依赖注入)是IOC实现的重要技术,有两种方式:
Setter方式注入
构造方式注入
IOC和di的关系
IOC全称inverse ofcontrol(反向控制或控制翻转)
Spring是具有IOC特性的框架
实现IOC是由spring容器来完成的,spring容器通过di建立起对象(组件,bean)之间的关系.
可以这样理解:di是IOC实现的一种手段,IOC的理论通过di来实现.
经典案例:
实例化dao类的对象在配置文件中进行配置.
Spring 通过BeanFactory管理和配置bean,在spring里,任何的java对象,java组件都被当成bean处理.
BeanFactory创建并负责管理spring bean的上下文的生命周期.并建立对象之间的依赖性,方式来描述对象之间的依赖关系.创建BeanFactory实例时,必须提供spring容器管理bean的详细配置信息,相应的xml文件作为参数传入.
Spring容器对bean组件的管理
Bean对象的创建时机,bean对象的创建模式以及bean对象的初始化和销毁.
<bean id=”feeDao” class=”tarena.dao.JdbcFeeDAO” lazy-init=”true” />
Bean对象的创建模式:
默认情况下,通过调用ac.getBean(“feeDAO”)方法获得的对象都是同一个对象.
使用单例模式有风险,风险在于多线程并发访问时会有一些状况.
DI注入
Setter方式注入
采用setter方式注入dao,spring在创建完service对象后,自动执行.
Private FeeDAO feeDao;
Public void setFeeDao(FeeDAO feeDao){
this.feeDao=feeDao;
}
<bean id=”feeService” scope=”prototype” class=”tarena.service.FeeServiceImpl”>
<!--定义DI依赖注入关系-->
<property name=”feeDao” ref=”feeDAO1” />
</bean>
<bean id=”feeDAO1” scope=”prototype” class=”tarena.dao.HibernaterFeeDAO” />
构造方式注入:
//采用构造方式注入dao
Spring在创建完service对象后,自动执行
Private FeeDAO feeDao;
Public FeeServiceImpl(FeeDAO feeDao){
this.feeDao=feeDao;
}
<bean id=”feeService” scope=”prototype” class=”tarena.service.FeeServiceImpl”>
<!--定义DI依赖注入关系-->
<constructor-arg index=”0” ref=”feeDAO1” />
</bean>
<bean id=”feeDAO1” scope=”prototype” class=”tarena.dao.HibernaterFeeDAO” />
构造方式注入,结构简单,但是不容易分辨注入参数的含义,set方式注入的话,但易分辨注入参数的含义,可读性好.在研发过程中,setter方式使用的较为多些.
标签:
原文地址:http://www.cnblogs.com/jisngjun/p/4726048.html