spring.docx_第1页
spring.docx_第2页
spring.docx_第3页
spring.docx_第4页
spring.docx_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Spring框架的优点都有什么? Spring是分层的架构,你可以选择使用你需要的层而不用管不需要的部分Spring是POJO编程,POJO编程使得可持续构建和可测试能力提高依赖注入和IoC使得JDBC操作简单化Spring是开源的免费的Spring使得对象管理集中化合简单化Spring 框架中核心组件有三个:Core、Context 和 Beans。其中最核心的组件就是Beans, Spring提供的最核心的功能就是Bean Factory。Spring 解决了的最核心的问题就是把对象之间的依赖关系转为用配置文件来管理,也就是Spring的依赖注入机制。这个注入机制是在Ioc 容器中进行管理的。Bean 组件是在 Spring 的 org.springframework.beans 包下。这个包主要解决了如下功能:Bean 的定义、Bean 的创建以及对 Bean 的解析。对 Spring 的使用者来说唯一需要关心的就是 Bean 的创建,其他两个由 Spring 内部机制完成。Spring Bean 的创建采用典型的工厂模式,他的顶级接口是 BeanFactory。BeanFactory 有三个子类:ListableBeanFactory、HierarchicalBeanFactory 和 AutowireCapableBeanFactory。但是从上图中我们可以发现最终的默认实现类是 DefaultListableBeanFactory,他实现了所有的接口。那为何要定义这么多层次的接口呢?查阅这些接口的源码和说明发现,每个接口都有他使用的场合,它主要是为了区分在 Spring 内部在操作过程中对象的传递和转化过程中,对对象的数据访问所做的限制。例如 ListableBeanFactory 接口表示这些 Bean 是可列表的,而 HierarchicalBeanFactory 表示的是这些 Bean 是有继承关系的,也就是每个 Bean 有可能有父 Bean。AutowireCapableBeanFactory 接口定义 Bean 的自动装配规则。这四个接口共同定义了 Bean 的集合、Bean 之间的关系、以及 Bean 行为。Bean 的定义就是完整的描述了在 Spring 的配置文件中你定义的 节点中所有的信息,包括各种子节点。当 Spring 成功解析你定义的一个 节点后,在 Spring 的内部他就被转化成 BeanDefinition 对象。以后所有的操作都是对这个对象完成的。Bean 的解析过程非常复杂,功能被分的很细,因为这里需要被扩展的地方很多,必须保证有足够的灵活性,以应对可能的变化。Bean 的解析主要就是对 Spring 配置文件的解析。1. Spring框架中的三大核心思想是什么DI(依赖注入),IOC(控制反转),AOP(面向切面编程)1. IOC的概念以及在Spring容器中如何进行IOC的操作。IOC:InversionofControl,控制反转。在Java开发中,IOC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制,这称为控制反转,就是被调用类的实例由原先的调用类控制创建、销毁现在转变成由Spring的容器管理。IoC最大的好处是什么?因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是实现于某种接口的),只要修改XML就可以了,这样我们甚至可以实现对象的热插拨(有点象USB接口和SCIS硬盘了)。AOP的概念是AspectedOrientedProgramming面身向方面编程。好处:AOP将程序分解成各个方面或者说关注点。这使得可以模块化,相当横向上分切了。它可以解决OOP和过程化方法不能够很好解决的横切(crosscut)问题,如:事务、安全、日志等横切关注可以把Spring AOP看作是对Spring的一种增强实现AOP有几种方式:1. Spring1.2版本中通过ProxyFactoryBean来实现aop,即通过动态代理来实现的,Aspect必须继承MethodBeforeAdvice,MethodAfterAdvice等2. Spring2.0AOP需要改的是FBI这个类,而且它也不需要再实现某些接口3. 三使用标注(AspectJ)实现AOPAOP有三种植入切面的方法:其一是编译期织入,这要求使用特殊的Java编译器,AspectJ是其中的代表者;其二是类装载期织入,而这要求使用特殊的类装载器,AspectJ和AspectWerkz是其中的代表者;其三为动态代理织入,在运行期为目标类添加增强生成子类的方式,Spring AOP采用动态代理织入切面。七大模块,如下:1.SpringCore:Core封装包是框架的最基础部分,提供IOC和依赖注入特性。这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置。2.SpringContext: 构建于Core封装包基础上的Context封装包,提供了一种框架式的对象访问方法,有些象JNDI注册器。Context封装包的特性得自于Beans封装包,并添加了对国际化(I18N)的支持(例如资源绑定),事件传播,资源装载的方式和Context的透明创建,比如说通过Servlet容器。3SpringDAO:DAO(DataAccessObject)提供了JDBC的抽象层,它可消除冗长的JDBC编码和解析数据库厂商特有的错误代码。并且,JDBC封装包还提供了一种比编程性更好的声明性事务管理方法,不仅仅是实现了特定接口,而且对所有的POJOs(plainoldJavaobjects)都适用。4.SpringORM:ORM封装包提供了常用的“对象/关系”映射APIs的集成层。其中包括JPA、JDO、Hibernate和iBatis。利用ORM封装包,可以混合使用所有Spring提供的特性进行“对象/关系”映射,如前边提到的简单声明性事务管理。5.SpringAOP: Spring的AOP封装包提供了符合AOPAlliance规范的面向方面的编程实现,让你可以定义,例如方法拦截器(method-interceptors)和切点(pointcuts),从逻辑上讲,从而减弱代码的功能耦合,清晰的被分离开。而且,利用source-level的元数据功能,还可以将各种行为信息合并到你的代码中。6.SpringWeb: Spring中的Web包提供了基础的针对Web开发的集成特性,例如多方文件上传,利用Servletlisteners进行IOC容器初始化和针对Web的ApplicationContext。当与WebWork或Struts一起使用Spring时,这个包使Spring可与其他框架结合。7.SpringWebMVC: Spring中的MVC封装包提供了Web应用的Model-View-Controller(MVC)实现。Spring的MVC框架并不是仅仅提供一种传统的实现,它提供了一种清晰的分离模型,在领域模型代码和WebForm之间。并且,还可以借助Spring框架的其他特性。1. DI的概念以及在Spring框架注入有几种方式。使用构造注入对象,必须要注意什么问题,当设值注入与构造注入同时存在时,执行的先后流程顺序注入方式:属性注入属性的SET/GET构造注入构造方法注入使用构造函数依赖注入时,Spring保证所有一个对象所有依赖的对象先实例化后,才实例化这个对象。使用set方法依赖注入时,Spring首先实例化对象,然后才实例化所有依赖的对象。当设值注入与构造注入同时存在时,先执行设置注入,在执行构造注入。1. 使用Spring的JDBCTemplate操作数据时,必须要往模板中注入哪些对象,同时模板要不要手动关闭数据库连接注入DataSource数据源对象不要手动关闭数据库连接,JdbcTemplate会帮我们关闭数据库连接Spring Web MVC能帮我们做什么让我们能非常简单的设计出干净的Web层和薄薄的Web层;进行更简洁的Web层的开发;天生与Spring框架集成(如IoC容器、AOP等);提供强大的约定大于配置的契约式编程支持;能简单的进行Web层的单元测试;支持灵活的URL到页面控制器的映射;非常容易与其他视图技术集成,如Velocity、FreeMarker等等,因为模型数据不放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很容易被其他框架使用);非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API;提供一套强大的JSP标签库,简化JSP开发;支持灵活的本地化、主题等解析;更加简单的异常处理;对静态资源的支持;Spring Web MVC框架也是一个基于请求驱动的Web框架,并且也使用了前端控制器模式来进行设计,再根据请求映射规则分发给相应的页面控制器(动作/处理器)进行处理。1、 请求如何给前端控制器?这个应该在web.xml中进行部署描述,在HelloWorld中详细讲解。2、 前端控制器如何根据请求信息选择页面控制器进行功能处理? 我们需要配置HandlerMapping进行映射3、 如何支持多种页面控制器呢?配置HandlerAdapter从而支持多种类型的页面控制器4、 如何页面控制器如何使用业务对象?可以预料到,肯定利用Spring IoC容器的依赖注入功能5、 页面控制器如何返回模型数据?使用ModelAndView返回6、 前端控制器如何根据页面控制器返回的逻辑视图名选择具体的视图进行渲染? 使用ViewResolver进行解析7、 不同的视图技术如何使用相应的模型数据? 因为Model是一个Map数据结构,很容易支持其他视图技术我们可以看出具体的核心开发步骤:1、 DispatcherServlet在web.xml中的部署描述,从而拦截请求到Spring Web MVC2、 HandlerMapping的配置,从而将请求映射到处理器3、 HandlerAdapter的配置,从而支持多种类型的处理器4、 ViewResolver的配置,从而将逻辑视图名解析为具体视图技术5、处理器(页面控制器)的配置,从而进行功能处理DispatcherServlet主要用作职责调度工作,本身主要用于控制流程,主要职责如下:1、文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;2、通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器);3、通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);4、通过ViewResolver解析逻辑视图名到具体视图实现;5、本地化解析;6、渲染具体的视图等;7、如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。Spring工作原理:1.Spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.3.DispatcherServlet请请求提交到目标Controller4.Controller进行业务逻辑处理后,会返回一个ModelAndView5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象6.视图对象负责渲染返回给客户端。请你谈谈SSH整合:SSH:Struts(表示层)+Spring(业务层)+Hibernate(持久层)1.Struts:Struts是一个表示层框架,主要作用是界面展示,接收请求,分发请求。在MVC框架中,Struts属于VC层次,负责界面表现,负责MVC关系的分发。(View:沿用 JSP,HTTP,Form,Tag,Resourse ;Controller:ActionServlet,struts-config.xml,Action)2.Hibernate:Hibernate是一个持久层框架,它只负责与关系数据库的操作。3.Spring:Spring是一个业务层框架,是一个整合的框架,能够很好地黏合表示层与持久层如何在web应用里面配置Spring?在web.xml中加入如下同容,在启动web服务器时加载/WEB-INF/applicationContext.xml中的内容。解释一下Dependency injection(DI,依赖注入)和IOC(Inversion of control,控制反转)?1.依赖注入DI是一个程序设计模式和架构模型, 一些时候也称作控制反转,尽管在技术上来讲,依赖注入是一个IOC的特殊实现,依赖注入是指一个对象应用另外一个对象来提供一个特殊的能力,例如:把一个数据库连接已参数的形式传到一个对象的结构方法里面而不是在那个对象内部自行创建一个连接。2.控制反转和依赖注入的基本思想就是把类的依赖从类内部转化到外部以减少依赖3.应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。也可以说,依赖被注入到对象中。所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。Spring中的BeanFactory与ApplicationContext的作用有哪些?1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的声明周期。2. ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能:1) 国际化支持2) 资源访问:Resource rs = ctx. getResource(”classpath:perties”), “file:c:/perties”3)事件传递:通过实现ApplicationContextAware接口如何配置Spring+struts?1.在struts-config.xml加入一个插件,通过它加载applicationContext.xml2.在struts-config.xml修改action-mapping标记,具体action交给了DelegateActionProxy3.通过DelegateActionProxy进入一Spring的环境。4.在Spring的applicationContext.xml加入Spring中的核心类有那些,各有什么作用?1.BeanFactory:产生一个新的实例,可以实现单例模式2.BeanWrapper:提供统一的get及set方法3.ApplicationContext:提供框架的实现,包括BeanFactory的所有功能spring的事务有几种方式?谈谈spring事务的隔离级别和传播行为。声明事务和编程事务Hibernate工作原理及为什么要用?原理:1)读取并解析配置文件2)取并解析映射信息,创建SessionFactory3)打开Sesssion4)创建事务Transation5)持久化操作6)提交事务7)关闭Session8)关闭SesstionFactory为什么要用:1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。为什么用SPRING:AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务 (比 如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。 IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词 倒置 所表明的,IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每一个对象都是用其协作对象构造的。因此是由容器管理协作对象(collaborator)。Spring即使一个AOP框架,也是一IOC容器。 Spring 最好的地方是它有助于您替换对象。有了 Spring,只要用 JavaBean 属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。Spring它是一个开源的项目,而且目前非常活跃;它基于IoC(Inversion of Control,反向控制)和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层中必须使用Spring,因为它模块化的很好,允许你根据自 己的需要选择使用它的某一个模块;它实现了很优雅的MVC,对不同的数据访问技术提供了统一的接口,采用IoC使得可以很容易的实现bean的装配,提供 了简洁的AOP并据此实现Transcation Managment,等等优点:1)Spring能有效地组织你的中间层对象,不管你是否选择使用了EJB。如果你仅仅使用了Struts或其他为J2EE的 API特制的framework,Spring致力于解决剩下的问题。2) Spring能消除在许多工程中常见的对Singleton的过多使用。根据我的经验,这是一个很大的问题,它降低了系统的可测试性和面向对象的程度。3) 通过一种在不同应用程序和项目间一致的方法来处理配置文件,Spring能消除各种各样自定义格式的属性文件的需要。曾经对某个类要寻找的是哪个魔法般的 属性项或系统属性感到不解,为此不得不去读Javadoc甚至源编码?有了Spring,你仅仅需要看看类的JavaBean属性。Inversion of Control的使用(在下面讨论)帮助完成了这种简化。4)通过把对接口编程而不是对类编程的代价几乎减少到没有,Spring能够促进养成好的编程习惯。5)Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。6) 使用Spring构建的应用程序易于单元测试。7)Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或localEJBs来实现业务接口,却不会影响调用代码。8)Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,它们适用于许多web应用。例如,Spring能使用AOP提供声明性事务管理而不通过EJB容器,如果你仅仅需要与单个数据库打交道,甚至不需要一个JTA实现。9)Spring为数据存取提供了一个一致的框架,不论是使用的是JDBC还是O/R mapping产品(如Hibernate)。Spring确实使你能通过最简单可行的解决办法来解决你的问题。而这是有有很大价值的。总结起来,Spring有如下优点:低侵入式设计,代码污染极低 独立于各种应用服务器,可以真正实现WriteOnce,RunAnywhere的承诺Spring的DI机制降低了业务对象替换的复杂性 Spring并不完全依赖于Spring,开发者可自由选用Spring框架的部分或全部Spring的声明式事务管理在底层是建立在AOP的基础之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。通常情况下,笔者强烈建议在开发中使用声明式事务,不仅因为其简单,更主要是因为这样使得纯业务代码不被污染,极大方便后期的代码维护。我们必须针对每一个目标对象配置一个ProxyFactoryBean;另外,虽然可以通过父子Bean的方式来复用TransactionInterceptor的配置,但是实际的复用几率也不高;这样,加上目标对象本身,每一个业务类可能需要对应三个配置,随着业务类的增多,配置文件将会变得越来越庞大,管理配置文件又成了问题。 为了缓解这个问题,Spring为我们提供了TransactionProxyFactoryBean(事务声明方法1),用于将TransactionInterceptor和ProxyFactoryBean的配置合二为一。基于命名空间和基于Transactional的事务声明方式各有优缺点。基于(方法2)的方式,其优点是与切点表达式结合,功能强大。利用切点表达式,一个配置可以匹配多个方法,而基于Transactional(方法3)的方式必须在每一个需要使用事务的方法或者类上用Transactional标注,尽管可能大多数事务的规则是一致的,但是对Transactional而言,也无法重用,必须逐个指定。另一方面,基于Transactional的方式使用起来非常简单明了,没有学习成本。开发人员可以根据需要,任选其中一种使用,甚至也可以根据需要混合使用这两种方式本教程的知识点大致总结如下: 基于TransactionDefinition、PlatformTransactionManager、TransactionStatus编程式事务管理是Spring提供的最原始的方式,通常我们不会这么写,但是了解这种方式对理解Spring事务管理的本质有很大作用。 基于TransactionTemplate的编程式事务管理是对上一种方式的封装,使得编码更简单、清晰。 基于TransactionInterceptor的声明式事务是Spring声明式事务的基础,通常也不建议使用这种方式,但是与前面一样,了解这种方式对理解Spring声明式事务有很大作用。 基于TransactionProxyFactoryBean的声明式事务是以上方式的改进版本,简化了配置文件的书写,这是Spring早期推荐的声明式事务管理方式,但是在Spring2.0中已经不推荐了。 基于和命名空间的声明式事务管理是目前推荐的方式,其最大特点是与SpringAOP结合紧密,可以充分利用切点表达式的强大支持,使得管理事务更加灵活。 基于Transactional的方式将声明式事务管理简化到了极致。开发人员只需在配置文件中加上一行启用相关后处理Bean的配置,然后在需要实施事务管理的方法或者类上使用Transactional指定事务规则即可实现事务管理,而且功能也不比其他方式逊色spring里面如何配置数据库驱动?使用”org.Springframework.jdbc.datasource.DriverManagerDataSource”数据源来配置数据库驱动。示例如下:org.hsqldb.jdbcDriver jdbc:hsqldb:db/appfuse saSpring里面如何定义hibernate mapping?添加hibernate mapping 文件到web/WEB-INF目录下的applicationContext.xml文件里面。示例如下:org/appfuse/model/User.hbm.xml如何在web环境中配置applicationContext.xml文件?org.Springframework.web.context.ContextLoaderListener 或:contextorg.Springframework.web.context.ContextLoaderServlet通过如下方法取出applicationContext实例:ApplicationContext ac=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext);Spring+hibernate的配置文件中的主要类有那些?如何配置?1.dataSource 2.sessionFactory:hibernate.cfg.xml 3.transactionManager 4.userDao (extends HibernateDaoSupport) 5.sessionFactory 6.facade 7.proxy 8.sessionFactory9.transactionManager 10.facade在myeclipse中先加入Spring环境再加入hibernate环境。如果Spring与hibernate结合在一起可以不需要hibernate.cfg.xml文件是否正确AOP里面重要的几个名词概念解释:1.切面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子。 在Spring AOP中,切面可以使用通用类(基于模式的风格) 或者在普通类中以 Aspect 注解(AspectJ风格)来实现。2.连接点(Joinpoint):在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。 在Spring AOP中,一个连接点 总是 代表一个方法的执行。 通过声明一个org.aspectj.lang.JoinPoint类型的参数可以使通知(Advice)的主体部分获得连接点信息。3.通知(Advice):在切面的某个特定的连接点(Joinpoint)上执行的动作。通知有各种类型,其中包括“around”、“before”和“after”等通知。 通知的类型将在后面部分进行讨论。许多AOP框架,包括Spring,都是以拦截器做通知模型, 并维护一个以连接点为中心的拦截器链。4.切入点(Pointcut):匹配连接点(Joinpoint)的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。 切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用Asp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论