




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、Spring框架的)长处均有什么?
Spring是分层的架构,你可以选择使用你需要的层而不用管不需要的部分
Spring是POJO编程,POJO编程使得可持续构建和可测试能力提高
依赖注入和【oC使得JDBC操作简朴化
Spring是开源的免费的
Spring使得对象管理集中化合简朴化
二、描述一下Spring中实现DI(DependencyInjection)H勺几种方式
方式一:接口注入,在实际中得到了普遍应用,虽然在IOC的概念尚未确立时,这样的措施
也已经频繁出目前我们的代码中。
方式二:Type2IoC:Setterinjec:ion对象创立之后,将被依赖对象通过set措施设置进去
方式三:Type3IoC:Constructorinjection对象创立时,被依赖对象以构造措施参数口勺方式注
入
Spring的方式
三、简述你对IoC(InversionofControl)的理解
一种类需要用到某个接口的措施,我们需要将类A和接口BH勺实现关联起来,最简朴的措施
是类A中创立一种对于接口BH勺实现C的实例,但这种措施显然两者的依赖(Dependency)
太大了。而IoC的措施是只在类A中定义好用于关联接口B的实现的措施,将类A,接口B
和接口B的实现C放入IoC的容器(Container)中,通过一定的配置由容器(Container)
来实现类A与接口B的实现C的关联。
四、Spring对多种ORM框架提供了很好口勺支持,简朴描述在Spring中使用Hibernate的措
施。
在context中定义DataSource,创立SessionFactoy,设置参数:DAO类继承
HihernateDaoSupport,实现详细接口,从中获得HibernateTeniplate进行详细操作。在使用中
假如碰至ljOpcnScssionlnVicw欧1问题,可以添力口OpcnScssionInVicwFiltcr或
OpenSessionlnViewInterceptor
五、请简介一下Spring的事务管理
spring提供了几种有关事务处理的类:
TransactionDcfinition〃事务属性定义
TranscaiionStatus//代表了目前的事务,可以提交,回滚。
PlaifonnTransaciionManagcr这个是spring提供的I用于管理事务小J基础接口,其下有一种实现
欧J抽象类AbstractPlatformTransactionNdanager,我们使用H勺事务管理类例如
DataSourceTransactionManager等都是这个类的了•类。
一般事务定义环节:
TransactionDefinitiontd=newTransactionDefinition();
TransactionStatusts=transacticnManager.getTiansaction(td);
iry
{//dosth
transactionMmit(ts);
}
catch(Exceptione){transactionManager.rollback(ts);)
spring提供的事务管理可以分为两类:编程式的和中明式的。编程式的,比较灵活,不过代码
量大,存在反复的代码比较多;申明式的比编程式的更灵活。
编程式重要使用IransaciionTcmpIaie。省略了部分H勺提交,回滚,一系列的事务对象定义,需
注入事务管理对象.
voidadd()
(
tninsactionTemplate.execute(newTransactionCallback()(
pulicObjectdoInTransaciion(TransactionStaiusts)
{//dosth}
}
申明式:
使用TransactionProxyFactoryBean:
PROPAGATION_REQUIREDPROPAGATION_REQUIRED
PROPAGATION_REQUIRED,readOnly
围绕Poxy的动态代理可以自动的提交和回滚事务
erceptor.TransactionProxyFactoryBean
PROPAGATION一REQUIRED-支持目前事务,假如目前没有事务,就新建一种事务。这是最
常见H勺选择。
PROPAGATION_SUPPORTS-支持目前事务,假如目前没有事务,就以非事务方式执行。
PRQPAGATION_MANDATORY-支持目前事务,假如目前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW-新建事务,假如目前存在事务,把目前事务挂起。
PROPAGATION_NOT_SUPPORTED-以非事务方.式执行操作,假如目前存在事务,就把目
前事务挂起。
PROPAGATION_NEVER-以非事务方式执行,假如目前存在事务,则抛出异常
PROPAGATION_NESTED-假如目前存在事务,则在嵌套事务内执行。假如目前没有事务,
则进行与PROPAGATION_REQUIRED类似的操作。
六、怎样在SpringH勺applicationContext.xml里面使用JNDI而穴是datasource?
可以使用“org.springframework.jndi.JndiObjectFactoryBean”来实现。示例如卜:
<beanid="dataSource”>
(propertyname="jndiName”>
<value'>java:comp/cnv/jdbc/appfuse</value'>
</property>
</bean>
七、Spring里面怎样配置数据库驱动?
使用org.springframework.jdbc.datasource.DriverManagerDataSource"数据源来配置数据库驱
动。示例如下:
<beanid="dataSource">
<propertyname="driverClassName”>
<value>org.hsqldb.jdbcDriver</value>
</property>
〈properlyname="urlM>
<value>jdbc:hsqldb:db/appfuse</value>
〈/property〉
<propertyname=Musername"><value>sa</value></property>
〈propertyname="passwordM><value></value></property>
</bean>
八、Spring里面applicaiionContext.xml文献能不能改成其他文献名?
ContextLoaderListener是一种ServlelContextListener,它在你的web应用启动的时候初始化。
缺省状况下,它会在WEB-INF/applicationContext.xnil文献找SpringFf、J配置。你可以通过
定义一种vcontext-param>元素名字为“contextConfigLocationv来变化Spring配置文献的位
留。示例如下:
<listener>
<listcncr-class>org.springframework.web.contcxt.ContcxtLoadcrListcner
<context-param>
<param-name>contextConfigLocation</param-nanie>
<param-value>/WEB-INF/xyz.xml</param-value>
</context-param>
</listcncr-class>
〈/listener〉
九、怎样在web应用里面配置spring?
在J2EE的web应用里面配置spring非常简朴,最简朴的只需要把spring得
ContextLoaderListener添加到你口勺web.xml文献里面就可以了,示例如下:
<listener>
<listcncr-class>org.springframcwork.wcb.contcxt.ContcxtLoadcrListcncr</listcncr-class>
</listener>
十、Spring里面怎样定义hibernatemapping?
添加hibernatemapping文献到web/WEB-INF目录下H勺applicationContext.xml文献里面。示
例如下:
<propcrtynamc="mappingRcsourccsv>
<list>
<valuc>org/appfusc/modcl/Uscr.hbm.xmI</valuc>
</Iist>
</property>
十一、两种依赖注入H勺类型都是什么?
两种依赖注入H勺类型分别是setter注入和构造措施注入。
setter注入:一般状况下所有H'、Jjavabean,我们都会使用setter措施和getter措施去设置和获
取属性的值,示例如下:
publicclassnaniebean{
Stringname;
publicvoidsctNamc(Stringa){
name=a;}
publicStringgetName(){
returnname;}
1
我们会创立•种bean的实例然后设置属性的值.springH勺配置文献如下:
<bcanid="beanI?/>
〈propertyname="name">
<value>tom</value>
々property〉
</bean>
Spring会调用setName措施来只是name熟悉为tom
构造措施注入:构造措施注入中,我们使用带参数的构造措施如下:
publicclassnamebean{
Stringname;
publicnamebean(Stringa){
name=a;
)
)
我们会在创立bean实例的时候以newnanicbcan("lom")的方式来设置name属性,Spring配
置文献如下:
<beanid="beanI">
<constructor-arg>
<value>MyBeanValue</value>
</constructor-arg>
</bcan>
使用constructor-arg标签来设置构造措施的参数。
十二、解释一下Dependencyinjeclion(DI,依赖注入)和IOC(Inversionofcontrol,控制反转)?
参照答案:依赖注入DI是一种程序设计模式和架构模型,某些时候也称作控制反转.尽管
在技术上来讲,依赖注入是一种IOCH勺特殊实现,依赖注入是指一种对象应用此外一种对象
来提供一种特殊的能力,例如:把一种数据库连接己参数口勺形式传到一种对象的构造措施里
面而不是在那个对象内部自行创•种连接.控制反转和依赖注入的基本思相就是把类的依
赖从类内部转化到外部以减少依赖
应用控制反转,对象在被创立的时候,由一种调控系统内所有对象的外界实体,将其所依赖
的对象的引用,传递给它。也可以说,依赖被注入到对象中。因比,控制反转是,有关一种对
象怎样获取他所依赖H勺对象的引用,这个责任的反转。
十三、spring中的IBeanFactor)r与Applicationcontext的作用和区别?
作用:
LDcanPactory负责读取bean配置文档,管理bean日勺加载,实例化,维犷bean之间的依赖大
系,负责bean的申明周期。
2./XpplicationContext除了提供上述BcanFactory所能提供H勺功能之外,还提供了更完整的框
架功能:
a.国际化支持
b.资源访问:Resourcers=ctx.getResource("classpath:perties"),
“file:c:/perties”
c.事件传递:通过实现ApplicationContextAware接口
3.常用H勺获取ApplicationContext的措施:
FilcSystcinXmlApplicacionConlcxt:从文献系统或者url指定的xml配置文献创立,参数为配
置文献名或文献名数组
ClassPathXnilApplicationConteKt:从classpath的xml配置文献创立,可以从jar包中读取配
置文献
WebApplicationContextUtils:从web应用的根目录读取配置文献,需要先在web.xml中配置,
可以配置监听器或者servlet来实现
<listcncr>
<listener-class>org.springframework.web.context.Con(ex(LoaderLis(ener</listener-class>
</listener>
<servlet>
<ser\rlet-name>context</servlet-name>
<servlet-class>org.springframework.web.con(ext.ContextLoaderSenflet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlct>
这两种方式都默认配置文献为web-inf/applicationContext.xml,也可使用context-param指定
配置文献
<context-param>
<param-name>contextConfigLocation</param-name>
<param-valuc>/WEB-INF/niyApplicaiionContext.xnil</param-valuc>
</context-param>
十四、怎样在web环境中配置applicationConiext.xnil文献?
<listener>
<listener-class>
org.springframework.web.con:ext.ContextLoaderListener
</listencr-class>
</iistener>
或:
<servlct>
<senlet-name>context</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderSenlet
</servlct-class>
<load-on-startup>1</load-on-slartup>
</servlet>
通过如下措施取出applicationContcxt实例:
ApplicationContext
ac=WebApplicationContextUtils.getWebApplicationContext(this.ge(ServletContext);
十五、怎样配置spring+struts?
在struis-config.xml加入一种插件,通过它加载applicationContext.xml
在struts-config.xml修改action-mapping标识,详细action交给了DelegateActionProxy(
通过DelegateActionProxy进入一spring的环境。(
在spring的applicationContexl.xml力II入(<beanname="/loginMclass=""singleton="false
/>
十六、spring+hibcrnatc的配置文献中的重要类有那些?怎样配置?
在myeclipse中先加入spring环境再加入hibernate环境v
假如spring与hibernate结合在一起可以不需要hihernate.cfg.xml文献与否对的?
spring+hibernate口勺配置文献中重要类有那些?怎样配置?
dataSource
sessionFactory:hibcmate.cfg.xnil
transaciionManagcr
userDao(extendsHibernateDaoSupport)
sessionFactor)'-
facade
proxy
sessionFactory
transaciionManagcr
facade
十七、在spring中怎样配容器H勺事务管理,有关的类有那些?
Datasoucc
transactionManager
userDao要注入
Datasouce
Proxy代理
TargeriwerDae代理对象(目的对象)
iransaciionAltribuies(那些措施需要事务处理)
transactionManagcr(事务处理服务)
十八、在spring中怎样配代码的事务管理?
Datasouce
transactionManager
userDao要注入
Datasoucc
transactionManager
通过如下类实现
TransactionTemplate
JdbcTeniplate
十九、在spring中有几种事务管理,分别是什么?
代码管理的事务处理
TransactonTemplate日勺execute措施中的内部类TransactionCallback中日勺doInTransaclion措施
中使用。
publicvoidmake。
(
TransactionTemplatejtm=newTransactionTemplate(this.getTransactionManager());
jtm.execute(newmyClass1());
publicclassmyClass1implementsTransactioncallback
publicObjectdoInTransaction(TransactionStatustrans)
(
I(ihcTemphtej(lbc=newJ(lh<:Template((int;iSoiirce);
jdbc.cxccutcC^inscrtintocustomcr(customcrNamc)vakics('b')”);
jdbc.cxccutc("inscrtintocustomcr(customcrNamc)valucs('b')^^);
returnnull;
)
)
容器管理的事务处理
二十、springH勺jdbc与老式W'Jjdbc有什么区别,其关键类有那些?
Spring的jdbc:节省代码,不管连接(Connection),不管事务、不管异常、不管关闭(con.closc()
ps.close)
JdbcTemplate(dataSource):增、删、改、查
TransactionTemplate(transactionManager):讲彳〒事务初、于甲
二十一、spring与ejb2.0口勺事务管理比较口勺优缺陷?
测试:
Spring:pojo
Ejb:二个接口一•种类,一堆配置文献
事务类型
Spring:jdbcjtahibernate
Ejb:jta
成本
Spring:一般容器(tomcaijboss)
Ejbrweblogicjboss
开发的周期:
Spring远比ejb快.
二十二、spring的配置H勺重要标签是什么?有什么作用?
<beans>
<beanid='"'class="”init='"'destroy="“singleton='”>
<propertyname=,M*>
<valuc></valuc>
<propcrty>
<propertyname='f
<reflocal></ref>
</property>
</bean>
</beans>
二十二、怎样在spring中实现国际化?
在applicationContext.xml加载一种bean
<bcanid="messageSourceclass=
cxl.suppori.RcsourccBundlcMcssagcSourcc”>
<propertyname="basename”>
<value>niessage</value>
</property>
</bean>
在src目录下建多种properties文献(
对于非英文H勺要用nativc2ascii(-encoding的2312源月转化文献有关内容
其命名格式是message.语言—国家。(
页面中的中显示提醒信息,键名取键值。(
当给定国家,系统会自动加载对应口勺国家/、Jproperties信息。(
通过applictionContext.getMessage(“键名","参数","区域”)取出有关的信息。(
二十四、Spring怎样实现事件处理?
事件
ExtendsApplicationEvent
监听器
ImplementsApplicationListener
事件源
ImplementsApplicationContext/Xware
在applicaiionConlexl.xml中配置事件源、监听器
先得到事件源,调用事件源的措施,告知监听器。
二十五、怎样加入Spring到web框架中?
在web.xml中加入如下同容,在启动web服务器时加载/WEB-INF/applicationContexl.xml中的
内容。
<servlet>
<servlct-name>context</servlct-name>
<servlct-class>
org.springframework.web.context.ContextlxjaderSe^let
</servlet-class>
<load-on-startup>1</ioad-on-startup>
</servlet>
通过如下类得到ApplicationConlext实例
WcbApplicationContcxtUtils.gctWcbApplicationContcxt
二十六、Spring怎样实现资源管理?
使用
applicalionContext.getResource1“classpath:文献名"):在src根目录下,在类途径下
applicationContcxt.gctRcsourcc;44classpath:/chapO1/>C"):以src根目录下的I基准往下走。
applicationContext.getResource(**file:c:/perties"):4E系统文献目录下。
二十七、Spring中Applicationcontext的作用是什么?
beanFactory
国际化(getMesage)
资源管理:可以直接读取一种文献日勺内容(gelResource)
加入web框架中(加入一种servlet或监听器)
事件处理
二十八、spring中的关键类有那些,各有什么作用?
BeanFactory:产生一种新的实例,可以实现单例模式
BeanWrapper:提供统一的Jget及set措施
ApplicalionConiext:提供框架的实现,包括BeanFactoryH勺所有功能
二十九、aop中的关键名词有些那些,互相关系是什么?
拦截器:代理
装备(advice)
目的对象
关切点:条件
连接点:措施、属性
三十、Spring和StrutsI向区别?
strusts:是一种基于MVC模式口勺一种web层口勺处理。
Spring:提供/通用的服务,ioc/diaop,关怀H勺不仅仅web层,应当j2cc整体的一种服务,可以
很轻易融合不一样的技术strutshibernateibalisejbremotespringJDBCspringMVC
三十•、struts+spring面试题
1.struts
Action是不是线程安全的?假如不是,有什么方式可以保证Action的线程安全?假如
是,阐明原因
2.MVC,分析•下struts是怎样实现MVC口勺
3.struts中口勺几种关键对象口勺作用(说说几种关键对象口勺作用)
4.spring
说说AOP和IOC的概念以及在spring中是怎样应用的
5.Hiberna(c有哪几种查询数据H勺方式
6.1oad()和get()的区别
回答:
1.Struts1Action是单例模式并且必须是线程安全的,由于仅有Action的一种实例来处理所有
的祈求。单例方略限制了Struts1Action能作的事,并且要在开发时尤其小心。Action资源必
须是线程安全H勺或同步的J。
Struls2Action对象为每一种祈求产生一种实例,因此没有线程安全问题。(实际上,scrvlc[容
器给每个祈求产生许多可丢弃的对象,并且不会导致性能和垃圾【可收问题)
2,struts是用一组类,servlet和jsp规范实现mvc的
3.ActionFromActionServletActionstruts-config.xml
4.spring的关犍就是IOC,通过指定对象的创立措施,描述对象与服务之间的关系,而不生成对
象
5.3种,hql条件查询0原生sql
6』oad()措施认为该数据一定存在,可以放心的使用代理来延时加载,假如使用过程中发现了
问题,就抛出异常;
gel()措施一定要获取到真实的数据,否则返回null
三十二、Struts,Spring.Hibernate面试题总结
Hibernate工作原理及为何要用?
原理:
1.读取并解析配置文献
2.读取并解析映射信息,创立SessionFactory
3.打开Sesssion
4.创立事务Transition
5.持久化操作
6.提交事务
7.关闭Session
8.关闭SesstionFactory
为何要用:
*对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐日勺反复性代码。
*Hibernale是一种基于JDBC的主流持久化框架,是一种优秀的ORM实现。他很大程度的
简化DAO层的编码工作
*hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
*hibernate的性能非常好,由于它是个轻量级框架。映射的灵活性很杰出。它支持多种关系
数据库.从一对一到多对多口勺多种复杂关系。
Hibernate是怎样延迟加载?
*Hibernaie2延迟加载实现:a)实体对象b)集合(Colleciion)
*Hiberna(c3提供了属性的延达加载功能
当Hibernate在杳询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对
象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的
性能。
Hibernate中怎样实现类之间的关系?(如:一对多、多对多日勺关系)
类与类之间H勺关系重要体目前表与表之间的关系进行操作,它们都市对对象进行操作,我们
程序中把所有H勺表与类都映射在一起,它们通过配置文献中股Jmany-to-onc^onc-to-many
many-to-manyx
说下Hibernate的缓存机制
*内部缓存存在Hibernate中又叫级缓存,属于应用事物级缓存
*二级缓存:
a)应用及缓存
b)分布式缓存
条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统
频繁使用、非关键数据
c)第三方缓存口勺实现
Hibernate的查询方式
SqRCriteria,objectcomposition
Hql:
*属性查询
*参数查询、命名参数查询
*关联查询
*分页杳询
*记录函数
怎样优化Hibernate?
*使用双向一对多关联,不使用单向一对多
*灵活使用单向一对多关联
*不用一对一,用多对一取代
*配置对象缓存,不使用集合缓存
*一对多集合使用Bag,多对多集合使用Set
*继承类使用显式多态
*表字段要少,表关联不要怕多,有二级缓存撑腰
Struts工作机制?为何要使用Struts?
工作机制:
Sti-uts口勺工作流程:
在web应用启动时就会加载初始化ActionSer\flet,ActionServlet从struts-config.xml文献中读
取配置信息,把它们寄存到多和配置对象当AetionServlet接受到一种客户祈求时,将执行如下
流程.
(I)检索和顾客祈求区配的ActionMapping实例,假如不存在,就返回祈求途径无效信息;
(2)假如AcuonFonn实例不存在,就创立一种ActionForm对象,把客户提交的表单数据保留到
ActionForm对象中;
(3)根据配置信息决定与否需要表单验证.假如需要验证,就调用ActionForm口勺validate。措施;
(4)假如ActionFonn的validate。措施返回null或返回一种不包括ActionMessage的
AcluibErrors对象,就表达表单验证成功;
(5)Ac〔ionScrvlct根据ActionMcpping所包括的I映射信息决定将祈求转发给哪个Action,假如对
应的IAction实例不存在,就先创立这个实例,然后调用Action『、Jexecute。措施;
(6)Action口勺execute。措施返回一种ActionForward对象,ActionServlet在把客户祈求转发给
ActionForward对象指向/、iJSP组件:
(7)ActionFon\ard对象指向JSP组件生成动态网页,返回给客户;
为何要用:
JSP、Servlet、JavaBcan技术的出现给我们构建强大的企业应用系统提供了也许。但用这些
技术构建的系统非常的繁乱,因此在此之上,我们需要一种规则、一种把这些技术组织起来
的规则,这就是框架,Struts便应运而生。
基于Struts开发的应用由3类组件构成:控制器组件、模型组件、视图组件
Stnitsvalidate框架是怎样验证日勺?
在struts配置文献中配置详细的错误提醒,再在FormBean中H勺validate。措施详细调用。
说下Struts的设计模式
MVC模式:web应用程序启动时就会加载并初始化AclionServler。顾客提交表单时,一种
配置.好的ActionForm对象被创立,并被填入表单对应附数据,ActionServler根据
Slruts-config.xnil文献配置好的设置决定与否需要表单验证,假如需要就调用ActionForm口勺
Validate()验证后选择将祈求发送到哪个Action,假如Action不存在,ActionServlet会先创
十这个对象,然后调用Actionexecute()措施■»Execute()从ActionForm对象中获取
数据,完毕业务逻辑,返回一种ActionFoward对象,ActionServlet再把客户祈求转发给
ActionForward对象指定於Jjsp组件,ActionForward对象指定的jsp生成动态的I网页,返回给
客户。
单例模式
Faclory(I:厂模式):
定义一种基类===》实现基类措施(子类通过不一样的措施)===》定义一种工厂类(生成
子类实例)
===》开发人员调用基类措施
Proxy(代理模式)
spring工作机制及为何要用?
I.springnivc请所石rJ祈求都棉交给DispatcherServlet.它会委托应用系统口勺其他模块负诗■负
责对祈求进行真正的处理工作。
2.DispatcherServlet查询一种或多种HandlerMapping,找到处理祈求的Controller.
3.Dispa(chcrScrvlct请祈求提交到目H勺Controller
4.Controller进行业务逻辑处理后,会返回一种ModelAndView
5.Dispathcher查询•种或多种ViewResolver视图解析器,找到ModelAndView对象指定的|视
图对象
6.视图对象负责渲染返回给客户端。
为何用:
AOP让开发人员可以创立非行为性的关注点,称为横切关注点,并将它们插入到应用程序
代码中。使用AOP后,公共服务(比如日志、持久性、事务等)就可以分解成方面并
应用到域对象上,同步不会增长域对象的对象模型的复杂性。
IOC容许创立一种可以构造对象口勺应用环境,然后向这些对象传递它们口勺协作对象。正如单
词倒置所表明口勺,IOC就像反过来的JNDL没有使用一堆抽象工厂、服务定位器、
单元素(singleton)和直接构造(sitrnightconstnietion),每一种对象都是用其协作对象
构造H勺。因此是由容揩管理协作对象(collaboraior)。
Spring虽然一种AOP框架,也是一IOC容器。Spring最佳日勺池方是它有助于您替代对象。
有了Spring,只要用JavaBean属性和配置文献加入依赖性(林作对象)。然后可以很轻易
地在需要时替代具有类似接口的协作对象。
三十三、某些Spring和Hibernate面试题(附答案)
1.简述你对IoC(InversionofControl)的理解,描述一下Spring中实现DI(Dependency
Injection)的几种方式。
2、Spring的Bean有多种作用域,包括:
singletonxprototyperequest、session>globalsessionapplication、自定义
3.简朴描述Springframework与Struts的不一样之处,整合Spring与Struts有哪些措施,哪
种最侔.为何?
4.Hibernate中口勺updale()和saveOUpdate。口勺区别
5.Spring对多种ORM框架提供了很好W、J支持,简朴描述在Spring中使用Hibernatetl勺措施,
并结合事务管理。
答案:
1、好莱坞原则€€€€不要打电话找我,我会打给你的。IoC将创立的职责从应用程序代码
搬到了框架中。Spring对Setter注入和构造措施注入提供支持。(详见,以及http:
//.com/spring_ref72.0/html/beans.html#beans-factoiy-collaborators)
2.除application(详见Springframework2.0Reference的3.4节beanH勺作用域)
3Spring是完整的一站式框架,而Stniis仅是MVC框架,且着重于MVC中的C。Spring有
三种方式整合Struts:使用Spring『、JActionSupport类整合Struts:使用SpringH勺
DelegatingRequestProcessor覆盖StrutsH勺RequestProcessor;洛StrutsAction管理委托给
Spring框架,动作委托最佳。(详见使用Spring更好地处理Struts动作)
Spring2.0新增一种方式:AutowiringRequestProcessor0(详见)
4.jwiveCrUpdnte()措施可以实现update()的功能,但会多些环节,详细如F:
假如对象在该session中已经被持久化,不进行操作;
对象H勺标识符属性(identifierproperty)在数据库中不存在或者是个临时的)值,调用savc()措施
保留它;
假如session中的另一种对象有相似的标识符抛出一种异常;
以上皆不符合则调用update。更新之。
5.在context中定义DataSource,创立SessionFactoy,设置参数:DAO类继承
HibernateDaoSupport.实现详细接口,从中获得HibemateTemplate进行详细操作。
在使用中假如碰到OpcnScssionlnVicw[内问题,可以添加OpcnScssionlnVicwFillcr或
OpenSessionInViewIntercep(or0(详见Springframework2.0ReferenceO12.2节Hibernate)
申明式事务需申明事务管理器,在context中设置指定属性,用确定和。
二十四、请你谈谈SSII整合
SSH:
Struts(表达层)+Spring(业务层)+Hibemate(持久层)
Stnits:
Struts是•种表达层框架,重要作用是界面展示,接受祈求,分发祈求.
在MVC框架中,Siruls属于VC层次,负责界面体现,负责MVC关系的)分发。(View:沿用
JSP,HTTP.Form.Tag,Resourse:Controller:ActionServlet,struts-config.xml.Action)
Hibernate:
Hibernate是一种持久层框架.它只负责与关系数据库H勺操作。
Spring:
Spring是•种业务层框架,是•种整合的框架,可以很好地期合表达层与持久层。
三卜五、在Spring框架中怎样愈加高效的使用JDBC
使用Spring框架提供的模板类JdbcTcmplctc可以是JDBC愈加高效
代码如下:JdbcTemplatetemplate=newJdbcTemplate(myDataSource);
DAO类的例子:
publicclassStudentDaoJdbcimplementsStudentDao{
privateJdbcTemplatejdbcTemp:ate;
publicvoid<;el.IclhcTenipl;He(.I(lh<'Templ;itejdhcTempkite)(
this.jdbcTemplate=jdbclcmplatc;
}
more..
)
配置文献:
<beanid='jdbcTemplale"class=,,org.springframework.jdbc.core.JdbcTemplate,>>
<propcrtyname-,dataSourcc^
<rcfbcan="dataSourcc'7>
</property>
</bean>
<bcanid=''studentDao"class="StudentDaoJdbc”>
<propertyname='jdbcTempkite">
<refbcan='jdbcTcmplale”/>
</propcrty>
</bean>
<beanid="courseDao”class="CourseDaoJdbc'>
<propertyname="jdbclempiate>
<refbean="jdbcTemplate"/>
</properly>
</bcan>
三十六、Spring怎样创立一种数据连接池.
<bcanid="da〔aSourcc”class=,,mons.dbcp.BasicDataSourcc,,>
<propcrtyname=,'drivcr,,>
<value>${db.driver}</value>
</property>
<propertynameT'uiTA
<value>${db.url}<value>
〈/property〉
<propcrtyname-,username'>
<value>${db.username}</value>
</property>
<propertyname=''password”>
<value>${db.password}</value>
</property>
</bcan>
三十七、Spring怎样配置一种bean来从JNDI得到DataSource
<beanid="dataSource”class=,,org.springframework.jndi.JndiObjec:FactoryBean',>
<propcrtyname-^jndiName,,><valuc>java:comp/env/jdbc/myDatasource</vaIue>
</propcrty>
</bean>
三十八、请简介一下Spring框架中BeanH勺作用域
在spring2.0之前,bean只有2种U乍用域口比singlclon(单例I)、non-singlcton(也称prototype),
Spring2.0后来,增长了session>request、globalsession三种专用于Web应用程序上下文H勺
Beam因此,默认状况下Spring2.0目前有五种类型RjBean。
<beanid="role"class=''spring.chapter2.maryGame.Role“scope=',singleton'7>
这里口勺scope就是用来配置springbean的作用域,它标识bean的作用域。
在spring?.0之前hean只有2种作用域即:lingletcn(单例)、ncn-singletcm(也称prototype),
Spring2.0后来,增长了session、request,globalsession三种专用于Web应用程序上下文H勺
Beano因此默认状况下Spring。目前有五种类型的Bean。当然,Spring2.0对Bean日勺类型
的设计进行了重构,并设计出灵活的Bean类型支持,理论上可以有无数多种类型的Bean,
顾客可以根据自己的需要,增长新的Bean类型,满足实际应用需求。
1.singleton作用域
当一种bean日勺作用域设置为singleton.那么SpringIOC容器中只会存在一种共享H勺bean实
例,并且所有对bean的祈求,只要id与该bean定义相匹配,则只会返回beanH勺同一实例。
换言之,当把一种bean定义设置为singleton作用域时,Spring[OC容器只会创立该bean定
义的唯一实例。这个单一实例会被存储到单例缓存(singletoncache)中,并且所有针对该
bean的后续祈求和引用都将返回被缓存的对象实例,这里要注意的是singleton作用域和
GOF设计模式中的单例杲完全不一样的J.单例设计模式表达一种ClassLoader中只有一种
class存在,而这里日勺singleton则表达一种容器对应一种bean,也就是说当一种bean被标识
为singleton时候,spring的IOC容器中只会存在一种该beano
配置实例:
<beanid="ro1e“class=,,spring.chapter2.maryGame.Role,'scope=',singleton'7>
或者
<beanid="role”class="spring.chapter2.maryGame.Role"singleton=,,trueM/>
2.prototype
prototype作用域布署的Ibean,每一次祈求(将其注入到另一种bean中,或者以程序的方式
调用容器的gc【Bcan()措施)都会产生一种新的bean实例,相称于一种new的操作,对于
prototype作用域的bean,有一点非常重要,那就是Spring不能对一种prototypebean的I整个
生命周期负责,容器在初始化、配置、装饰或者是装配完一种proiotype实例后,将它交给客
户端,随即就对该prototype实例不闻不问了。不管何种作用域,容器都会调用所有对象的初
始化生命周期回调措施,而对prototype而言,任何配置好的析构生命周期回调措施都将不
会被调用.清除pENype作用域的对象并释放任何prototypeK^n所持有的昂设资嫄,都是
客户端代码H勺职责。(让Spring容器释放被singleton作用域bean占用资源H勺一种可行方式
是,通过使用bean的后置处理器,该处理器持有要被清除的btan的引用。)
配置实例:
<beanid="role”class=',spring.chapter2.maryGanie.Role,,scope=,,prototypeM/>
或者
vbeanid=''role"class="spring.chapter2.maryGame.Role''singlelon=''fhlse'7>
3.request
request表达该针对每一次HTTP祈求都会产生一种新的bean,同步该bean仅在目前HTTP
request内有效,配置实例:
request^session>globalsession使用的时候,首先要在初始化webIf]web.xml中做如下配置:
假如你使用口勺是Servlet2.4及以卜的web容器.那么你仅需要在web应用口勺XML申明文献
web.xml中增长卜述ContextListener即可:
<web-app>
<listener>
<listener-class>org.springfraniework.web.context.request.RequestC3ntextListener</listener-class>
</listener>
</web-app>
假如是Scrvlc(2.4此前Ifjweb容器,那么你要使用一种javax.scrvlci.Filler的实现:
<web-app>
<filter>
<filter-name>requestContextFiher</filter-name>
<filfer-class>org.springfr;imew(irk.weh.filter.Re1|iie<ifC()ntextFilter</filter-clas!<>
</filtcr>
〈filler-mapping〉
<fllter-name>requestContextFiller</filter-name>
<url-pattern>/*</url-pattem>
</filter-mapping>
</web-app>
接着既可以配置bean的作用域T:
<beanid=Mrole“class=Mspring.chapter2.niarjrGanie.Rolevscope=MrequestM/>
4.session
session作用域表达该针对每一次HTFP祈求都会产生一种新的Jbean.同为该bean仅在目前
HTTPsession内有效,配置实例:
配置实例:
和request配置实例的前提同样,配置好web启动文献就可以如下配置:
<beanid="ro1e“class=,,spring.chapter2.maryGame.Role,'scope="session”/〉
5.globalsession
globalsession作用域类似于原则口勺HTTPSession作用域,不过它仅仅在基于portlet的web
应用中才故意义。Portlet规范定义了全局Session口勺概念,它被所有构成某个portletweb应
用的多种不一样的portlet所共享。在globalsession作用域中定义的bean被限定于全局portlet
Session的生命周期范围内。假如你在web中使用globalsession作用域来标识bean,那么,web
会自动当成session类型来使用。
配置实例:
和request配置实例的前提同样,配置好web启动文献就可以如下配置:
<beanid="role”class="spring.chapter2.maryGame.Role"scope=,'globalsession'7>
6.自定义hean装配作用域
在spring2.0中作用域是可以任意扩展的,你可以自定义作用域,甚至你也可以重新定义已
经有的作用域(不过你不能莅盖singleton和prototype),spring的I作用域由接口
org.springframe\vork.beans.factor}f.config.Scope来定义,自定义自己H勺作用域只要实现该接口
即可,下面给个实例:
我们建立一种线程的scope,该scope在表达一种线程中有效,代码如下:
publicclassMyScopeimplementsScope...{
privatefinaiThrcadLocalihrcadScopc=newThrcadLocal()...{
protectedObjectinitialValuc()...{
returnnewHashMapO;
}
}:
publicObjectget(Slringname,ObjectFactoryobjeclFaclory)...{
Mapscope=(Map)ihrcadScope.gc(();
Objectobject=scopc.get(name);
if{object=null)...{
object=objectFactory.getObjec:();
scope.put(name,object);
returnobject;
publicObjectremove(Stringname)...{
Mapscope=(Map)threadScope.get();
returnscope.remove(name);
)
publicvoidregisterDejitnicti()nCallhack(Stringname,Runnablecallback)
)
publicStringgctConvcrsationldO...{
//TODOAuto-generatedmethodstub
returnnull;
)
)
三十九、
请简介一下Spring框架中BeanH勺生命周期
一、Bean的定义
Spring一般通过配置文献定义Beano如:
<?xmlvcrsion=T.O"cncoding="UTF-8"?>
<bcansxmlns='"'
xmlns:xsi="”
xsi:scheniaLocation=,>://.org/schema''beans/spring-beans-2.().xsd,,>
<beanid^HelloWorld''class=,,com.pqf.beans.HelloWorld,5>
<propertyname=''msg''>
<value>HelloWorld</value>
</proper(y>
</bcan>
</beans>
这个配置文献就定义了一种标识为HelloWorld的Bean。在一种配置文档中可以定义多种
Beano
二、Bean的初始化
有两种方式初始化Renn,.
1.在配置文档中通过指定init-method属性来完毕
在Bean的类中实现一种初始化Bean属性的J措施,如init(),如:
publicclassHelloWorld{
publicStringmsg=null;
publicDatedate=null;
publicvoidinit(){
msg="HelloWorld";
datc=ncwDa(c();
)
然后,在配置文献中设置init-moihod属性:
<beani(J="HelloWorldclass=Mcom.pqf.beans.HeiloWorldMinii-moihod="inii
</bean>
2、实现org.springfrainwork.beans.factory.InitializingBean□
Bean实现InitializingBean接口,并且增长afterPropertiesSet()措施:
publicclassHelloWorldimplementInitializingBean{
publicStringmsg=null;
publicDatedate=null;
publicvoidaftcrPropcrticsSct(){
msg=”向全世界问好!”;
date=newDate();
)
)
那么,当这个Bean的所有属性被Spring的BeanFactory设置完后,会自动调用
aflcrPropcrlicsSci。措施对Bean进行初始化,于是,配置文献就不用指定init-mcihod属性/。
三、Bean的调用
有三种方式可以得到Bean并进行调用:
1使用BeanWrapper
HeiIoWorldhw=newHelloWorlJ();
BeanWrapperbw=ncwBcanWrapperlmpl(hw);
bw.sctPropertyvaluc("msg"HelloWorkl");
system.out.println(bw.getPropertyCalue(°msg°));
2.使用BeanFactory
InputStieamis=newFileInputStream("config.xml"):
XmlBeanFactoryfactory=newXmlBeanFactory(is);
HelloWorldhw=(HelloWorld)factory.geiBean("HelioWorld");
systcm.out.println(hw.gctMsgO);
3.使用ApplicationConttext
Applicationcontextactx=newFleSystemXmlApplicationContext(Mconfig.xml");
HelloWorldhw=(HelloVVorld)actx.getBean("HelloWorld");
System.out.println(hw.getMsgO);
四、Bean时销毁
I.使用配置文献中的destory-method属性
与初始化属性inil-methods类似,在Bean的类中实现一种撤销Bean日勺措施,然后在配置文
献中通过destory-method指定,那么当bean销毁时,Spring符自动调用指定的销毁措施。
2、实现org.spring
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年异环磷酰胺项目发展计划
- 信息技术行业人工智能与机器学习解决方案
- 企业国际化发展应对预案
- 股份制改革流程指导书
- 选矿厂安全风险分级管控
- 古代文化传统欣赏:诗词教学方法设计
- 行政管理工作手册指南
- 摄影基础知识与技巧指南
- 项目申请审批报告的编写指南
- 家用门禁改造方案范本
- 《公安机关人民警察内务条令》知识题库
- 中东及非洲战术高频无线电行业现状及发展机遇分析2024-2030
- 南充市委组织部南充市遴选(考调)公务员笔试真题2022
- 2024风电场集电线路电缆敷设施工方案
- 中医拔罐课件
- 2024年安徽商贸职业技术学院单招职业适应性测试题库附答案
- TD/T 1075-2023 光伏发电站工程项目用地控制指标(正式版)
- 2024年成都新都投资集团有限公司招聘笔试冲刺题(带答案解析)
- 汉字艺术研究报告
- 冀教版二年级《数学》下册单元测试卷加答案
- 宣传片基本报价单三篇
评论
0/150
提交评论