1. 开发中主要使用 Spring 的什么技术 ?
①. IOC 容器管理各层的组件 ②. 使用 AOP 配置声明式事务 ③. 整合其他框架
2. Spring使用了哪些设计模式
(1)工厂模式,在各种BeanFactory以及ApplicationContext创建中都用到了;
(2)模板模式,也是在各种BeanFactory以及ApplicationContext创建中都用到了;
(3)代理模式,在AOP实现中用到了JDK的动态代理;
(4)单例模式,比如创建bean的时候;
(5)策略模式,第一个地方,加载资源文件的地方,使用了不同的方法,比如:classPathResource,FileSystemResource,ServletContextResource,UrlResource但他们都有共同的接口Resource;第二个地方就是AOP的实现中,采用了不同的方式,JDK动态代理和CGLIB代理;
3. 如何在WEB 里面配置SPRING
主要配置Spring Web 监听器
4. 以Spring 为基础的J2EE 项目中,一般如何分层?每个层的作用是什么?事务控制放在哪一层?
一般分为持久层(DAO 层)、业务层(Service 层)、控制层、视图层;事务一般放在业务层,以一个业务作为一个事务分割的最小单位。
5. Spring 中bean 的配置scope 表示什么含义?可以有哪几种取值。
【参考答案】
scope 表示Bean 的生命周期或者叫Bean 的作用域。scope 的值有两个:
1、singleton,为单例属性,即Spring IoC 容器只会创建该bean 的唯一一个实例,这也是默认的。
2、prototype 为原型属性,即每一次请求都会产生一个新的bean 实例。
6. 在 Spring 中如何配置 Bean ?
Bean 的配置方式: 通过全类名(反射)、通过工厂方法(静态工厂方法 & 实 例工厂方法)、FactoryBean
7. Spring 有哪几种注入方式?
3 种方法。构造属入、属性注入、接口注入
8. IOC容器对Bean的生命周期:
①:通过构造器或工厂方法创建Bean实例
②:为将Bean的属性设置值和对其他Bean的引用
③:将Bean实例传递给Bean后置处理器的postProcessBeforeInitialization方法
④:调用Bean的初始化方法(init-method)
⑤:将Bean实例传递给Bean后置处理器的postProcessBeforeInitialization方法
⑥:Bean可以使用了
⑦:当容器关闭时,调用Bean的销毁方法(destroy-method)
9. 对Spring理解与作用
Spring是一个开源的控制反转和面向切面的容器框架。
Spring包含依赖注入容器、AOP实现、DAO/ORM支持、Web集成等。
解耦合、提供各种服务(事务管理、消息服务)、单例模式支持、AOP技术可以很容易的实现权限控制、监控等、很多辅助类加快应用开发、对各大主流的应用框架提供了集成支持。
10. 在spring中有几种事务管理,分别是什么?
代码管理的事务处理、容器管理的事务处理;
并不直接管理事务、将事务管理委托给事务管理器;
声明式事务
传播行为、隔离级别
11. Spring与Struts集成
把业务对象、Action纳入spring的ioc容器
12. Spring的事务有哪几种?
编程式事务和声明式事务
13. Spring 的常用注解
1. 控制反转
@Component,标注为一个普通的bean
@Service,@Repository
2. 依赖注入
@Autowired
@Qulifier
@Resource
@Value
3. 全局
@Configuration,代替配置文件,相当于beans
@ComponentScan,配置扫描包
@Scope,配置bean的生命周期
14. 讲讲spring中的事务,如何支持事务的,事务的7大传播属性,spring mvc 作为控制器层需要注意什么
有编程型(事务量比较少)与声明型事务(aop)
1 不同平台下的有不同事务管理器
2 加功能的代码写在通知类中,spring已经提供了环绕通知,事务拦截器TransactionInteceptor
3 专门提供了一个类TransactionProxyFactoryBean生成事务代理类,该类内部持有事务拦截器TransactionInteceptor,只需注入
事务管理器与目标类即可
事务的7大传播属性 required(有就使用没有就建立一个) required_new(有没有都创建一个) support(支持) not_suppot(不支持) never(不支持,有事务管理器还报错) 嵌套
spring mvc的配置文件与ContextLoaderListener加载的包含service层 dao层实例的配置文件最好分开
15. 简述 AOP 和 IOC 概念
AOP: Aspect Oriented Program, 面向(方面)切面的编程;Filter(过滤器) 也是一种 AOP. AOP 是一种新的方法论, 是对传统 OOP(Object-Oriented Programming, 面向对象编程) 的补充. AOP 的主要编程对象是切面(aspect), 而切面模块化横切关注点.
IOC: Invert Of Control, 控制反转. 也成为 DI(依赖注入)其思想是反转 资源获取的方向. 传统的资源查找方式要求组件向容器发起请求查找资源.作为 回应, 容器适时的返回资源. 而应用了 IOC 之后, 则是容器主动地将资源推送 给它所管理的组件,组件所要做的仅是选择一种合适的方式来接受资源. 这种行 为也被称为查找的被动形式
16. Spring的事务策略有哪几种?
ROPAGATION_REQUIRED—支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择;
PROPAGATION_SUPPORTS—支持当前事务,如果当前没有事务,就以非事务方式执行;
PROPAGATION_MANDATORY—支持当前事务,如果当前没有事务,就抛出异常;
PROPAGATION_REQUIRES_NEW—新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED—以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER—以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED—如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
17. 什么是IOC?什么是DI?
IOC是Inversion Of Control是缩写 ,DI是Dependency Injection的缩写,IOC即DI,是Spring框架的核心思想,它主要解决编写应用程序时不用关心组件的实现。不管是IOC还是DI都说明Spring采用动态、灵活的方式来管理各种对象,它们的主要作用是分离组件的使用和实现。依赖注入是指在程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部注入。
18. Spring DI 的三种方式?
1.构造器注入:通过构造方法初始化
2.setter方法注入:通过setter方法初始化
3.接口注入
19. IOC,AOP的实现原理?
IOC:通过反射机制生成对象注入
AOP:动态代理
20. 什么是aop 说说AOP的一些概念概念和术语 aop好处 项目中怎么用的
aop aspect oriedted program 面向切面(方面)编程,在不改变源代码的基础上给目标类加上一些非业务性功能,如事务,日志,权限,需要给目标类生成代理类,生成代理类的技术有面向接口的jdk动态代理以及面向具体类的cglib技术(jdk通过接口实现,cglib通过继承来实现),加功能的代码写在通知类中,有五种 通知类,前置通知
后置通知,环绕通知,异常通知,最终通知,给代理类注入目标类和通知类,客户操纵的是代理类,想更精确的切入,使用切入点,例如
如果想把功能切入到哪些包下的哪些类的哪些方法需要aspectJ切入点表达式. exucution( * com.lxit..*.add(..) ) //修饰符? 返回值 类全名.方法名(..) 异常?
连接点是某个方法的调用或者异常的抛出,连接点的集合就是切入点
aop好处 源代码的无关性,低侵入式设计
项目中怎么用
1 事务 2 日志 3 权限
1 事务
1 配置事务管理器,不同的平台有不同的事务管理器,如DataSourceTransactionManager,HibernateTransactionManager,JPATransactionManager
2 使用 3 在需要事务的类或方法上使用@Transactionnal 日志 struts2的拦截器就是一个环绕通知 我们可以把消息通知写在invoke前后,怎么就是aop了 aop 是没有修改源代码的情况下加功能 加功能的代码写在通知类中 21. 什么是AOP?AOP有什么好处?AOP主要用在什么地方?spring怎么实现AOP? AOP(Aspect Orient Programming),也就是面向切面编程,作为面向对象编程的一种补充。它从动态角度考虑程序运行过程。它主要将程序中的公共问题集中解决。AOP将“方面”分离出来,写代码时只需关注当前业务逻辑;AOP的一个典型应用是在声明式事务。Spring采用在方法调用前、后或抛出异常时“织入”方面代码来实现AOP。 22. Spring 对多种ORM 框架提供了很好的支持,结合事务管理描述spring 从哪些方面提供了对Hibernate 的支持。 【参考答案】 1、SessionFactory 管理。使用Spring 整合Hibernate 时我们不需要hibernate.cfg.xml 文件。首先, 在applicationContext.xml 中配置数据源( dataSource ) bean 和session 工厂(sessionFactory)bean。 2、持入层管理。Spring 提供了HibernateTemplate,用于持久层访问,无需打开Session及关闭Session。它只要获得SessionFactory 的引用,将可以只读地打开Session,并在持久化访问结束后关闭Session,对持久层逻辑,通用的操作(如对数据库中数据的增,删,改,查)有HibernateTemplate 完成。 3、对DAO 的支持:通过继承HibernateDaoSupport 实现DAO 基本操作。 4、对事务支持:Spring 的声明式事务和编程式事务,很好的将持久化的操作纳入事务管理。 23. Spring 使用了哪些设计模式,这样用有什么好处? 答案: (1)工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例; (2)单例模式:Bean默认为单例模式。 (3)代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术; (4)模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。 (5)观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现--ApplicationListener。 【参考答案】 最典型的像:工厂模式,Spring 的IOC 容器就是一个大的Bean 实例的工厂,负责Bean的周期管理。单例模式,这个和Spring 的IOC 一起的,既然是IOC 是一个大工厂,那个Bean对象为减少内存开销就需要提供单例特征。适配器模式,在Spring 的AOP 编程中随处可见Adapter 模式的应用。代理模式,为其它对象提供一种代理访问的机制。观察者模式,当对象发生变化时,其它对象需要得到相应更新,Spring 中应用也较为普遍。 24. 解释一下IOC,以及spring 的举例 IOC 称为控制反转,也叫依赖注入,ioc 是Spring 的核心组件,它通过配置文件,将需要创建的对象以池的方式管理,将实例注入到需要的对象中区,是对象依赖于注入而不依赖于实现,解决了各个组件的耦合度,使得项目在后期的维护和扩展上非常方便。如在ssh框架整合中,我们将datasource 对象注入给sessionFactory,再将sessionFactory 注入给dao 组件,再将dao 组件注入给struts 的Action 组件,在将action 对象注入给struts的拦截器。 25. 解释Spring支持的几种bean的作用域。 Spring容器中的bean可以分为5个范围: (1)singleton:默认,每个容器中只有一个bean的实例,单例的模式由BeanFactory自身来维护。 (2)prototype:为每一个bean请求提供一个实例。 (3)request:为每一个网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。 (4)session:与request范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效。 (5)global-session:全局作用域,global-session和Portlet应用相关。当你的应用部署在Portlet容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。全局作用域与Servlet中的session作用域效果相同。 26. Spring基于xml注入bean的几种方式: (1)Set方法注入; (2)构造器注入:①通过index设置参数的位置;②通过type设置参数类型; (3)静态工厂注入; (4)实例工厂; 27. Spring 工作原理 内部最核心的就是IOC 了,动态注入,让一个对象的创建不用new 了,可以自动的生产,这其实就是利用java 里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring 的配置文件来动态的创建对象,和调用对象里的方法的还有一个核心就是AOP 这个就是面向切面编程,可以为某一类对象进行监督和控制(也就是在调用这类对象的具体方法的前后去调用你指定的模块)从而达到对一个模块扩充的功能。这些都是通过配置类达到的 Spring 目的: 就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring 根据这些配置内部通过反射去动态的组装对象)要记住:Spring 是一个容器,凡是在容器里的对象才会有Spring 所提供的这些服务和功能 28. 简述spring 的事务传播行为和隔离级别 spring 的事务传播行为: Spring 在TransactionDefinition 接口中规定了7 种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播:PROPAGATION_REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。PROPAGATION_MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常。PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED 类似的操作。 Spring 的隔离级别 1、Serializable:最严格的级别,事务串行执行,资源消耗最大; 2、REPEATABLE READ:保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了“脏读取”和“不可重复读取”的情况,但是带来了更多的性能损失。 3、READ COMMITTED:大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”。该级别适用于大多数系统。 4、Read Uncommitted:保证了读取过程中不会读取到非法数据。 29. 谈谈你对Spring AOP 思想的理解。 【参考答案】 AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-OrientedPrograming,面向对象编程)的补充和完善。OOP 引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP 则显得无能为力。也就是说,OOP 允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能,日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在OOP 设计中,它导致了大量代码的重复,而不利于各个模块的重用。而AOP 技术则恰恰相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。AOP 代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息。而剖开的切面,也就是所谓的“方面”了。然后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹。使用“横切”技术,AOP 把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。Aop 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。实现AOP 的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。 30. 说明反转控制(IOC)和面向方向编程(AOP)在 spring 中的应用 解答:Spring 核心容器(Core)提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory, 它是工厂模式的实现。BeanFactory 使用控制反转(Ioc)模式将应用程序的配置和依赖性规范与实际 的应用代码程序分开。Spring 的声明式事务基于 AOP 实现,却并不需要程序开发者成为 AOP 专家,亦可轻易使用 Spring 的声明式事务管理。 31. 谈谈你对Spring 的理解。 1.Spring 实现了工厂模式的工厂类(在这里有必要解释清楚什么是工厂模式),这个类名为BeanFactory ( 实际上是一个接口), 在程序中通常BeanFactory 的子类 ApplicationContext。Spring 相当于一个大的工厂类,在其配置文件中通过 2. Spring 提供了对IOC 良好支持,IOC 是一种编程思想,是一种架构艺术,利用这种思想可以很好地实现模块之间的解耦。IOC 也称为DI(Depency Injection)。 3. Spring 提供了对AOP 技术的良好封装, AOP 称为面向切面编程,就是系统中有很多各不相干的类的方法,在这些众多方法中要加入某种系统功能的代码,例如,加入日志,加入权限判断,加入异常处理,这种应用称为AOP。实现AOP 功能采用的是代理技术,客户端程序不再调用目标,而调用代理类,代理类与目标类对外具有相同的方法声明,有两种方式可以实现相同的方法声明,一是实现相同的接口,二是作为目标的子类在,JDK 中采用Proxy类产生动态代理的方式为某个接口生成实现类,如果要为某个类生成子类,则可以用CGLI B。在生成的代理类的方法中加入系统功能和调用目标类的相应方法,系统功能的代理以Advice 对象进行提供,显然要创建出代理对象,至少需要目标类和Advice 类。 32. Spring框架有什么优点? 答案: (1)spring属于低侵入式设计,代码的污染极低; (2)spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性; (3)Spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。 (4)spring对于主流的应用框架提供了集成支持。 另一种答案: 低侵入式设计,代码的污染极低;独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run AnyWhere;Spring框架的DI机制降低了业务对象替换的复杂性;Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部。 33. Spring框架有哪几部分组成? Spring框架由Spring Core、Spring AOP、Spring ORM、Spring DAO、Spring Web、Spring Context以及Spring MVC组成。 34. Spirng中的Bean的作用范围有哪些? singleton、prototype、request、session、global session