Spring 常见问题

1. Spring如何实现事件处理? 

事件 ??Extends ApplicationEvent 

监听器 ??Implements ApplicationListener 

事件源 ??Implements ApplicationContextAware 

在applicationContext.xml中配置事件源、监听器 先得到事件源,调用事件源的方法,通知监听器


2、简述你对IoC(Inversion of Control)的理解 
一个类需要用到某个接口的方法,我们需要将类A和接口B的实现关联起来,最简单的方法是类A中创建一个对于接口B的实现C的实例,但这种方法显然两者的依赖(Dependency)太大了。而IoC的方法是只在类A中定义好用于关联接口B的实现的方法,将类A,接口B和接口B的实现C放入IoC的 容器(Container)中,通过一定的配置由容器(Container)来实现类A与接口B的实现C的关联。


3、 如何在web应用里面配置spring? 
在J2EE的web应用里面配置spring非常简单,最简单的只需要把spring得ContextLoaderListener添加到你的web.xml文件里面就可以了,示例如下: 

<listener>     
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 

</listener>


4. spring中的BeanFactory与ApplicationContext的作用和区别? 作用: 
1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的声明周期。 
2. ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能:
a. 国际化支持 
b. 资源访问:Resource rs = 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来实现 


 
 5.spring 的优点?

  1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦
  2.可以使用容易提供的众多服务,如事务管理,消息服务等
  3.容器提供单例模式支持
  4.容器提供了 AOP 技术,利用它很容易实现如权限拦截,运行期监控等功能
  5.容器提供了众多的辅助类,能加快应用的开发
  6.spring 对于主流的应用框架提供了集成支持,如 hibernate,JPA,Struts 等
  7.spring 属于低侵入式设计,代码的污染极低
  8.独立于各种应用服务器
  9.spring 的 DI 机制降低了业务对象替换的复杂性
  10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring 的部分或全部


6.什么是 AOP?
面向切面编程(AOP)完善 spring 的依赖注入(DI),面向切面编程在 spring 中主要表
   现为两个方面:
   1.面向切面编程提供声明式事务管理
   2.spring 支持用户自定义的切面  面向切面编程(aop)是对面向对象编程(oop)的补充,
  面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个 切面。

  AOP 从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop 是静态的抽象,aop 是动态的抽象,  是对应用执行过程中的步骤进行抽象,,从而获得步骤之间的逻辑划分。


7、为什么要用spring:  
AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务 (比 如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。  IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词 倒置 所表明的,IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每一个对象都是用 其协作对象构造的。因此是由容器管理协作对象(collaborator)。  
Spring即使一个AOP框架,也是一IOC容器。 Spring 最好的地方是它有助于您替换对象。有了 Spring,只要用 JavaBean 属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。
  aop 框架具有的两个特征:  1.各个步骤之间的良好隔离性  2.源代码无关性


8、Spring框架支持如下五种不同的作用域: 
singleton:在Spring IOC容器中仅存在一个Bean实例,Bean以单实例的方式存在。 
prototype:一个bean可以定义多个实例。 
request:每次HTTP请求都会创建一个新的Bean。该作用域仅适用于WebApplicationContext环境。 
session:一个HTTP Session定义一个Bean。该作用域仅适用于WebApplicationContext环境. 
globalSession:同一个全局HTTP Session定义一个Bean。该作用域同样仅适用于WebApplicationContext环境. bean默认的scope属性是’singleton‘。


26.Spring框架中单例beans是线程安全的吗? 

不是,Spring框架中的单例beans不是线程安全的。




原文地址:https://www.cnblogs.com/leeeee/p/7276453.html