首页 > 技术文章 > Spring小知识点

xiaowater 2018-11-21 20:00 原文

调用固定的初始方法和销毁方法,仅用于单例:

xml:
<bean id="user" class="com.action.UserAction" init-method="init" destroy-method="destroy"/>
annotation:
@PostConstruct && @PreDestroy

<alias name="fromName" alias="toName"/>

 
Spring的事件框架:
ApplicationEvent:容器事件,必须由ApplicationContext发布。
ApplicationListener:监听器,可由容器中的任何监听器bean担任
 
传统JavaBean和Spring中的bean存在如下区别:
1,用处不同:传统lavaBean 更多地作为值对象传递参数,而Spring 中的bean 用处
几乎无所不在,任何应用组件都可被称为bean
2,写法不同:传统lavaBean 作为值对象,要求每个属性都提供getter 和setter 方法:
但Spring 中的bean 只需为接受设值注入的属性提供setter 方法。
3,生命周期不同:传统lavaBean 作为值对象传递,不接收任何容器管理其生命周期:
Spring 中的bean 由Spring 管理其生命周期行为。
 
依赖检查:dependency-check(bean的属性
no:不进行依赖检查
simple:对基本类型和集合(除了合作者bean)进行依赖检查
objects:仅对合作者进行依赖检查
all:全部检查
 

lazy-init 设置只对scop属性为singleton的bean起作用

如果一个设置了立即加载的bean1,引用了一个延迟加载的bean2,那么bean1在容器启动时被实例化,而bean2由于被bean1引用,所以也被实例化,这种情况也符合延迟加载的bean在第一次调用时才被实例化的规则。
 

解释Spring框架中bean的生命周期。

  1. Spring容器 从XML 文件中读取bean的定义,并实例化bean。
  2. Spring根据bean的定义填充所有的属性。
  3. 如果bean实现了BeanNameAware 接口,Spring 传递bean 的ID 到 setBeanName方法。
  4. 如果Bean 实现了 BeanFactoryAware 接口, Spring传递beanfactory 给setBeanFactory 方法。
  5. 如果有任何与bean相关联的BeanPostProcessors,Spring会在postProcesserBeforeInitialization()方法内调用它们。
  6. 如果bean实现IntializingBean了,调用它的afterPropertySet方法,如果bean声明了初始化方法,调用此初始化方法。
  7. 如果有BeanPostProcessors 和bean 关联,这些bean的postProcessAfterInitialization() 方法将被调用。
  8. 如果bean实现了 DisposableBean,它将调用destroy()方法

Bean 工厂和 Application contexts 有什么区别?

Application contexts提供一种方法处理文本消息,一个通常的做法是加载文件资源(比如镜像),它们可以向注册为监听器的bean发布事件。另外,在容器或容器内的对象上执行的那些不得不由bean工厂以程序化方式处理的操作,可以在Application contexts中以声明的方式处理。Application contexts实现了MessageSource接口,该接口的实现以可插拔的方式提供获取本地化消息的方法。

ApplicationContext通常的实现是什么?

FileSystemXmlApplicationContext :此容器从一个XML文件中加载beans的定义,XML Bean 配置文件的全路径名必须提供给它的构造函数。
ClassPathXmlApplicationContext:此容器也从一个XML文件中加载beans的定义,这里,你需要正确设置classpath因为这个容器将在classpath里找bean配置。
WebXmlApplicationContext:此容器加载一个XML文件,此文件定义了一个WEB应用的所有bean。

 

 

 

推荐阅读