☆1、谈谈你对Spring的理解?[上海极点信息科技有限公司] spring是一个设计层面,轻量级的控制反转(IOC)和切面(AOP)非侵入式的开源框架, 他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用 ☆2、请谈谈你对Spring的IOC和DI的理解?[极点科技] 控制反转IOC(Inversion of control):对象创建的权利反转到Spring容器(ApplicationContext.xml)而程序本身不在维护了 依赖注入DI(Dependency injection) :实际上DI和IOC是同一个概念,对象的创建由spring容器注入
3、Spring提供了几种注入方式?bean的生命周期主要有哪几种,用于什么情况? ①注入方式:
set : 针对性强 构造器 : 赋值方便
接口 : 降低类之间的耦合性,提高代码可读性,与操作性 注解 : 使用方便,想赋值就赋值。控制性强 ②bean的生存范围: scope 属性 (文档) 默认singleton(默认单例,action不能为单例):bean对象只会实例化一次 prototype(原型 多例):多个对象实例 request:一次HTTP请求,对应一个实例,仅在基于web的SpringApplicationContext情形下有效 session:session中对应一个实例.web 下有效 global session : 在一个全局的HttpSession中,一个bean定义对应一个实例
☆4、请解释下Spring的AOP是什么,有什么作用? AOP(Aspect Oriented Programming)面向切面编程 前置型通知 : 指定方法执行之前先执行通知方法。 后置型通知 : 指定方法执行之后再执行通知方法。
环绕行通知 : 执行方法执行之前执行一次,当指定方法执行之后,再返回坏绕行通知方法。
最终型 : 不管是否抛出异常都会执行通知。
异常型通知 : 只有当目标方法抛出异常之后才会执行通知
5、Spring中使用了哪些经典设计模式,举例说明? 1)工厂方法(Factory Method):Spring中的FactoryBean,让子类决定实例化哪一个类 2)单例(Singleton):提供了全局的访问点BeanFactory 3)适配器(Adapter):将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 举例:实现接口,web.servlet.mvc.SimpleControllerHandlerAdapter 4)代理(Proxy):为其他对象提供一种代理以控制对这个对象的访问 举例:aop 5)模板方法Template Method:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步
骤 举例:JdbcTemplate和DaoSupport
☆6、请描述下Spring是如何管理事务的? 声明式 : 在ApplicationContext.xml文件中配置事务 配置简单,使用方便,可控性强,细粒度高。由于它是将事务放在 xml文件里的,所以需要解析 编程式事务 : 在ApplicationContext.xml文件中配置事务 侵入性强,可控性差,一经编译不可被改变。但由于它是将事务代码写在DAO层代码里的,性能方面更高 注解 : 在持久层配置注解 配置简单,使用方便。缺点是一编译不可被改变。
7、请描述下Spring整合struts2的基本步骤? 导包 配置struts.objectFactory属性值: 8、请描述下Spring如何解决懒加载的方式? lazy-init(也分局部和全局):懒加载 true:延迟初始化,用到对象时,才初始化对象 9、请描述下Springmvc有哪些核心组件? 核心控制器:DispatcherServlet 控制器: Controller 请求分发器:Handler Mapping 视图解析器:ViewResolver & View 拦截器: Interceptors 本地化解析器 LocalResolver 验证器 Validate ☆10.Spring的安全(线程安全?)问题? 线程不安全的 struts1的action是单例的,所以存在线程安全问题(strusts2是多例的,所以也存在线程安全问题) springmvc默认的注入是单例,所以也存在线程安全问题 原因:单例 解决办法: struts1如果被spring管理,设置成scope为protype 禁用可变动的成员变量,使用局部变量 ☆11.请描述下Springmvc的工作流程? 比较:☆struts和springmvc工作流程 1.DispatcherServlet接收请求 2.DispatcherServlet查询对应的处理器映射项(HandlerMapping),,找到处理请求的 Controller,负责对请求进行真正的处理工作。 3.DispatcherServlet请求提交到目标Controller 4..Controller进行业务逻辑处理后,会返回一个ModelAndView 5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象 6.视图对象负责渲染返回给客户端。 1) 客户端发送请求(*.action) 2) FilterDispatcher拦截请求 3) 调用ActionMapper,查找有没有对应的action 4) 找到对应的action,创建Action的代理类ActionProxy,负责action的执行 5) ActionProxy通过ConfigurationManager对象获得当前访问的action的相关配置信息. 6) ActionProxy根据获得的action的配置信息,创建ActionInvocation对象. 7) ActionInvocation对象负责执行invoke()方法,调用action的方法 8) 处理完action后,返回Result对象,拦截器根据处理结果分发到对应的视图页面显示 ☆12.Struts与SpringMVC的区别 区别 struts SpringMVC 核心控制器 过滤器 Dispather Servler Scope 基于类开发,传递参数是 基于方法开发,传递参数是通 通过类的属性,只能设计为多例 过方法形参,可以设计为单例 返回 String Model and View 设计思想 oop 在servlet上扩展 性能 spring会稍微比struts快 **********框架整合***** ★★★★★SSH[上海宜采软件科技有限公司] 一、Struts + Spring + Hibernate Struts:表现层 1、Struts2采用Filter 进行配置 2、配置提交方式、通配符 3、 Spring:业务层 1、AOP 2、CORE 3、applicationContext.xml常用配置(dataSource数据源配置,sessionFactory工厂,TrasactionManager事务配置) Hibernate:持久层 1、SQL和JDBC API 2、基于POJO,便于测试 二、Struts整合Spring 1、使用Spring 的 ActionSupport 类整合 Struts 2、使用Spring 的 DelegatingRequestProcessor 覆盖 Struts 的 RequestProcessor 3、将Struts Action 管理委托给 Spring 框架 三、Spring 整合 Hibernate 1、在 Spring 框架中,像 JDBC DataSource 或 Hibernate SessoionFactory 这样的资源,在应用程序上下文中可以用 bean 实现; 1、配置数据源,有三种方式的数据源 方式一:Spring内置实DriverManagerDataSource 方式二:DBCP提供的BasicDataSource 方式三:JNDI数据源(mysql5,tomcat6为例) 2、配置sessionFactory 3、配置事务 四、准备 1. 开发环境:MyEclipse 8.0 GA(Eclipse3.5.1,JRE1.6.0.10和MyEclipse Enterprise WorkBench8.0) 2. 运行环境:JDK 6 Update 20(JRE1.6.0.13) 3. 开发框架:Struts 2.1.8.1,Spring 2.5,Hibernate 3.2 4. 应用服务器:tomcat 6.0.26 5. 数据库服务器:SQL Server 五、理论 五、理论 简单来说就是使用Spring的IoC在Spring的容器中初始化好注入 bean、 sessionFactory、action、manager、dao等对象,这样对象就可以直接使用。 Hibernate负责数据库的持久化操作。 Struts负责表现层数据的传递,页面的跳转等。 SSH整合[重点--上海科江电子 上海触特信息科技] pojo:@Entity @Id @GeneratedValue @Column dao: BaseDao:@Repository @Resource private SessionFactory sessionFactory; public Session getSession(){ return this.sessionFactory.getCurrentSession(); } Spring的配置文件[百联]: 扫描包(排除控制层对象) 引入jDBC的属性文件 配置DataSource 配置SessionFactory