因此它将面向接口的编程思想贯穿整个系统应用Spring的.docx
- 文档编号:7449801
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:14
- 大小:26.69KB
因此它将面向接口的编程思想贯穿整个系统应用Spring的.docx
《因此它将面向接口的编程思想贯穿整个系统应用Spring的.docx》由会员分享,可在线阅读,更多相关《因此它将面向接口的编程思想贯穿整个系统应用Spring的.docx(14页珍藏版)》请在冰豆网上搜索。
因此它将面向接口的编程思想贯穿整个系统应用Spring的
spring是一个设计层面的框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。
Spring的orm框架用来集成其他持久层框架,比如hibernate,spring-orm框架对hibernate的session进行了封装,我们可以很方便的通过继承这个封装类HibernateDAOSupport并注入hibernate的sessionFactory完成初始化,并调用其内置对象HibernateTemplate的封装方法来调用session的API而不用考虑到session的初始化和关闭以及事务处理等系统操作,这也是AOP思想的一种体现。
Hibernate的延迟加载功能是指获取某个实体对象时并不从数据库中加载他的关联对象,而在实际获取关联对象的时候才从数据库中加载,这样做很好的节省了数据库资源但是前提是必须保持session处于打开状态,在所有操作完成后再关闭。
Spring封装了session操作后很自然的要做到在方法调用的前后打开和关闭session,这样我们在通过HibernateTemplate的方法来获取实体对象以后session就已经关闭了,而这时候在调用获取关联对象的方法的时候就会抛出异常:
一、IoC(Inversionofcontrol):
控制反转
1、IoC:
概念:
控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系
核心:
bean工厂;在Spring中,bean工厂创建的各个实例称作bean
二、AOP(Aspect-OrientedProgramming):
面向方面编程
1、代理的两种方式:
静态代理:
针对每个具体类分别编写代理类;λ
针对一个接口编写一个代理类;λ
动态代理:
针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类
2、AOP的主要原理:
动态代理
Spring工作原理
Spring已经用过一段时间了,感觉Spring是个很不错的框架。
内部最核心的就是IOC了,
动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射
反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置
文件来动态的创建对象,和调用对象里的方法的。
Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象进行监督和控制(也就是
在调用这类对象的具体方法的前后去调用你指定的模块)从而达到对一个模块扩充的功能。
这些都是通过
配置类达到的。
Spring目的:
就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明
管理的(Spring根据这些配置内部通过反射去动态的组装对象)
要记住:
Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。
Spring里用的最经典的一个设计模式就是:
模板方法模式。
(这里我都不介绍了,是一个很常用的设计模式)
Spring里的配置是很多的,很难都记住,但是Spring里的精华也无非就是以上的两点,把以上两点跟理解了
也就基本上掌握了Spring.
1.springmvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。
2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.
3.DispatcherServlet请请求提交到目标Controller
4.Controller进行业务逻辑处理后,会返回一个ModelAndView
5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象
6.视图对象负责渲染返回给客户端。
二、为什么要用spring:
AOP让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。
使用AOP后,公共服务(比如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。
IOC允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。
正如单词倒置所表明的,IOC就像反过来的JNDI。
没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straightconstruction),每一个对象都是用其协作对象构造的。
因此是由容器管理协作对象(collaborator)。
Spring即使一个AOP框架,也是一IOC容器。
Spring最好的地方是它有助于您替换对象。
有了Spring,只要用JavaBean属性和配置文件加入依赖性(协作对象)。
然后可以很容易地在需要时替换具有类似接口的协作对象。
三、请你谈谈SSH整合:
SSH:
Struts(表示层)+Spring(业务层)+Hibernate(持久层)
Struts:
Struts是一个表示层框架,主要作用是界面展示,接收请求,分发请求。
在MVC框架中,Struts属于VC层次,负责界面表现,负责MVC关系的分发。
(View:
沿用JSP,HTTP,Form,Tag,Resourse;Controller:
ActionServlet,struts-config.xml,Action)
Hibernate:
Hibernate是一个持久层框架,它只负责与关系数据库的操作。
Spring:
Spring是一个业务层框架,是一个整合的框架,能够很好地黏合表示层与持久层。
四、介绍一下Spring的事务管理:
事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。
这样可以防止出现脏数据,防止数据库数据出现问题。
开发中为了避免这种情况一般都会进行事务管理。
Spring中也有自己的事务管理机制,一般是使用TransactionMananger进行管理,可以通过Spring的注入来完成此功能。
spring提供了几个关于事务处理的类:
TransactionDefinition//事务属性定义
TranscationStatus//代表了当前的事务,可以提交,回滚。
PlatformTransactionManager这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类例如DataSourceTransactionManager等都是这个类的子类。
一般事务定义步骤:
TransactionDefinitiontd=newTransactionDefinition();
TransactionStatusts=transactionManager.getTransaction(td);
try
{//dosth
transactionMmit(ts);
}
catch(Exceptione){transactionManager.rollback(ts);}
spring提供的事务管理可以分为两类:
编程式的和声明式的。
编程式的,比较灵活,但是代码量大,存在重复的代码比较多;声明式的比编程式的更灵活。
编程式主要使用transactionTemplate。
省略了部分的提交,回滚,一系列的事务对象定义,需注入事务管理对象.
voidadd(){
transactionTemplate.execute(newTransactionCallback(){
pulicObjectdoInTransaction(TransactionStatusts)
{//dosth}
}
}
声明式:
使用TransactionProxyFactoryBean:
PROPAGATION_REQUIREDPROPAGATION_REQUIREDPROPAGATION_REQUIRED,readOnly
围绕Poxy的动态代理能够自动的提交和回滚事务
org.springframework.transaction.interceptor.TransactionProxyFactoryBean
PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。
这是最常见的选择。
PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER–以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED–如果当前存在事务,则在嵌套事务内执行。
如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
五、Spring里面如何配置数据库驱动?
使用”org.springframework.jdbc.datasource.DriverManagerDataSource”数据源来配置数据库驱动。
示例如下:
hsqldb:
db/appfuse
六、Spring里面applicationContext.xml文件能不能改成其他文件名?
ContextLoaderListener是一个ServletContextListener,它在你的web应用启动的时候初始化。
缺省情况下,它会在WEB-INF/applicationContext.xml文件找Spring的配置。
你可以通过定义一个
示例如下:
七、如何在web应用里面配置spring?
在web.xml中加入如下同容,在启动web服务器时加载/WEB-INF/applicationContext.xml中的内容。
org.springframework.web.context.ContextLoaderServlet
通过如下类得到ApplicationContext实例
WebApplicationContextUtils.getWebApplicationContext
八、Spring里面如何定义hibernatemapping?
添加hibernatemapping文件到web/WEB-INF目录下的applicationContext.xml文件里面。
示例如下:
九、解释一下Dependencyinjection(DI,依赖注入)和IOC(Inversionofcontrol,控制反转)?
依赖注入DI是一个程序设计模式和架构模型,一些时候也称作控制反转,尽管在技术上来讲,依赖注入是一个IOC的特殊实现,依赖注入是指一个对象应用另外一个对象来提供一个特殊的能力,例如:
把一个数据库连接已参数的形式传到一个对象的结构方法里面而不是在那个对象内部自行创建一个连接。
控制反转和依赖注入的基本思想就是把类的依赖从类内部转化到外部以减少依赖
应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。
也可以说,依赖被注入到对象中。
所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。
十、spring中的BeanFactory与ApplicationContext的作用有哪些?
1.BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的声明周期。
2.ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能:
a.国际化支持
b.资源访问:
Resourcers=ctx.getResource(”classpath:
config.properties”),“file:
c:
/config.properties”
c.事件传递:
通过实现ApplicationContextAware接口
3.常用的获取ApplicationContext的方法:
FileSystemXmlApplicationContext:
从文件系统或者url指定的xml配置文件创建,参数为配置文件名或文件名数组
ClassPathXmlApplicationContext:
从classpath的xml配置文件创建,可以从jar包中读取配置文件
WebApplicationContextUtils:
从web应用的根目录读取配置文件,需要先在web.xml中配置,可以配置监听器或者servlet来实现
这两种方式都默认配置文件为web-inf/applicationContext.xml,也可使用context-param指定配置文件
十一、如何在web环境中配置applicationContext.xml文件?
org.springframework.web.context.ContextLoaderListener
或:
org.springframework.web.context.ContextLoaderServlet
通过如下方法取出applicationContext实例:
ApplicationContextac=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext);
十二、如何配置spring+struts?
在struts-config.xml加入一个插件,通过它加载applicationContext.xml
在struts-config.xml修改action-mapping标记,具体action交给了DelegateActionProxy
通过DelegateActionProxy进入一spring的环境。
在spring的applicationContext.xml加入
十三、spring+hibernate的配置文件中的主要类有那些?
如何配置?
dataSource
sessionFactory:
hibernate.cfg.xml
transactionManager
userDao(extendsHibernateDaoSupport)
sessionFactory
facade
proxy
sessionFactory
transactionManager
facade
在myeclipse中先加入spring环境再加入hibernate环境。
如果spring与hibernate结合在一起可以不需要hibernate.cfg.xml文件是否正确
十四、如何在spring中实现国际化?
在applicationContext.xml加载一个bean
在src目录下建多个properties文件
对于非英文的要用native2ascii-encodinggb2312源目转化文件相关内容
其命名格式是message_语言_国家。
页面中的中显示提示信息,键名取键值。
当给定国家,系统会自动加载对应的国家的properties信息。
通过applictionContext.getMessage(“键名”,”参数”,”区域”)取出相关的信息。
十五、spring中的核心类有那些,各有什么作用?
BeanFactory:
产生一个新的实例,可以实现单例模式
BeanWrapper:
提供统一的get及set方法
ApplicationContext:
提供框架的实现,包括BeanFactory的所有功能
十六、什么是aop,aop的作用是什么?
面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足
除了类(classes)以外,AOP提供了切面。
切面对关注点进行模块化,例如横切多个类型和对象的事务管理
Spring的一个关键的组件就是AOP框架,可以自由选择是否使用AOP
提供声明式企业服务,特别是为了替代EJB声明式服务。
最重要的服务是声明性事务管理,这个服务建立在Spring的抽象事物管理之上
允许用户实现自定义切面,用AOP来完善OOP的使用
可以把SpringAOP看作是对Spring的一种增强
十七、使用Spring有什么好处?
◆Spring能有效地组织你的中间层对象,无论你是否选择使用了EJB。
如果你仅仅使用了Struts或其他的包含了J2EE特有APIs的framework,你会发现Spring关注了遗留下的问题,。
◆Spring能消除在许多工程上对Singleton的过多使用。
根据我的经验,这是一个主要的问题,它减少了系统的可测试性和面向对象特性。
◆Spring能消除使用各种各样格式的属性定制文件的需要,在整个应用和工程中,可通过一种一致的方法来进行配置。
曾经感到迷惑,一个特定类要查找迷幻般的属性关键字或系统属性,为此不得不读Javadoc乃至源编码吗?
有了Spring,你可很简单地看到类的JavaBean属性。
倒置控制的使用(在下面讨论)帮助完成这种简化。
◆Spring能通过接口而不是类促进好的编程习惯,减少编程代价到几乎为零。
◆Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。
在Spring应用中的大多数业务对象没有依赖于Spring。
◆使用Spring构建的应用程序易于单元测试。
◆Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。
你能选择用POJOs或localEJBs来实现业务接口,却不会影响调用代码。
◆Spring帮助你解决许多问题而无需使用EJB。
Spring能提供一种EJB的替换物,它们适于许多web应用。
例如,Spring能使用AOP提供声明性事务而不通过使用EJB容器,如果你仅仅需要与单个的数据库打交道,甚至不需要JTA实现。
■Spring为数据存取提供了一致的框架,不论是使用JDBC或O/Rmapping产品(如Hibernate)。
Spring确实使你能通过最简单可行的解决办法解决你的问题。
这些特性是有很大价值的。
总结起来,Spring有如下优点:
◆低侵入式设计,代码污染极低
◆独立于各种应用服务器,可以真正实现WriteOnce,RunAnywhere的承诺
◆Spring的DI机制降低了业务对象替换的复杂性
◆Spring并不完全依赖于Spring,开发者可自由选用Spring框架的部分或全部
十八、什么是Spring,它有什么特点?
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
◆轻量——从大小与开销两方面而言Spring都是轻量的。
完
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 因此 它将 面向 接口 编程 思想 贯穿 整个 系统 应用 Spring