spring初次体验
1.BeanFactory:实际上是实例化,配置和管理众多bean的容器。这些bean通常会彼此合作,因而它们之间会相互依赖。BeanFactory使用的配置数据可以反映这些依赖关系中(一些依赖可能不像配置数据一样可见,而是在运行期作为bean之间程序交互的函数)。
一个BeanFactory可以用接口org.springframework.beans.factory.Beanfactory表示,这个接口有多个实现。最常使用的简单的BeanFactory实现是org.springframe.beans.factory.xml.XmlBeanfactory
(ApplicationContext)是BeanFactory的子类,所以大部分的用户更喜欢使用ApplicationContext的xml格式。
虽然大多数情况下,几乎所有被BeanFactory管理的用户代码都不要知道BeanFactory,但是BeanFactory也会被某种方式实例化。可以使用下面的代码实例化BeanFactory。
InputStream is=new FileInputStream("beans.xml");
XmlBeanFactory bis=new XmlBeanFactory(is);
或者
ClassPathResource res=new ClassPathResource("beans.xml");
XmlBeanFactory bis=new XmlBeanFactory(res);
或者
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(
new String[] {"applicationContext.xml", "applicationContext-part2.xml"});
// of course, an ApplicationContext is just a BeanFactory
BeanFactory factory = (BeanFactory) appContext;
很多情况下,用户代码不需要实例化BeanFactory, 因为Spring框架代码会做这件事。例如,web层提供支持代码,在J2EE web应用启动过程中自动载入一个Spring ApplicationContext。这个声明过程在这里描述:
编程操作BeanFactory将会在后面提到,下面部分将集中描述BeanFactory的配置.
一个最基本的BeanFactory配置由一个或多个它所管理的Bean定义组成。在一个XmlBeanFactory中,根节点beans中包含一个或多个bean元素。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="..." class="...">
...
</bean>
<bean id="..." class="...">
...
</bean>
...
</beans>
2.作用域session和request的意义:
request表明该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前的HTTP request内有效,配置实例
request .session. global session使用的时候首先要在初始化的时候首先要在web.xml中做出如下配置:
如果你使用的是Servlet 2.4及以上的web容器,那么你仅需要在web应用的XML声明文件web.xml中增加下述ContextListener即可:
<web-app>
...
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
...
</web-app>
如果是Servlet2.4以前的web容器,那么你要使用一个javax.servlet.Filter的实现:
<web-app>
..
<filter>
<filter-name>requestContextFilter</filter-name>
<filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>requestContextFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
...
</web-app>
接着就可以使用bean的作用域了
<bean id="role" class="spring.chapter2.maryGame.Role" scope="request"/>
session表明该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前的HTTP session内有效,和request配置条件一样,也需要在web.xml中进行配置
<bean id="role" class="spring.chapter2.maryGame.Role" scope="session"/>
3.bean的生命周期
- 容器启动,实例化所有实现了BeanFactoyPostProcessor接口的类。他会在任何普通Bean实例化之前加载.
- 实例化剩下的Bean,对这些Bean进行依赖注入。
- 如果Bean有实现BeanNameAware的接口那么对这些Bean进行调用
- 如果Bean有实现BeanFactoryAware接口的那么对这些Bean进行调用
- 如果Bean有实现ApplicationContextAware接口的那么对这些Bean进行调用
- 如果配置有实现BeanPostProcessor的Bean,那么调用它的postProcessBeforeInitialization方法
- 如果Bean有实现InitializingBean接口那么对这些Bean进行调用
- 如果Bean配置有init属性,那么调用它属性中设置的方法
- 如果配置有实现BeanPostProcessor的Bean,那么调用它的postProcessAfterInitialization方法
- Bean正常是使用
- 调用DisposableBean接口的destory方法
- 调用Bean定义的destory方法
如果从大体上区分值分只为四个阶段
- BeanFactoyPostProcessor实例化
- Bean实例化,然后通过某些BeanFactoyPostProcessor来进行依赖注入
- BeanPostProcessor的调用.Spring内置的BeanPostProcessor负责调用Bean实现的接口: BeanNameAware, BeanFactoryAware, ApplicationContextAware等等,等这些内置的BeanPostProcessor调用完后才会调用自己配置的BeanPostProcessor
- Bean销毁阶段
spring初次体验的更多相关文章
- kubebuilder实战之二:初次体验kubebuilder
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- ASP.NET Core Identity Hands On(1)——Identity 初次体验
ASP.NET Core Identity是用于构建ASP.NET Core Web应用程序的成员资格系统,包括成员资格.登录和用户数据存储 这是来自于 ASP.NET Core Identity 仓 ...
- 在docker中初次体验.net core 2.0
.net core的跨平台有了Linux,不能没有docker……网上的系列文章一大推,特别是docker还有了中文官网:https://www.docker-cn.com/ .上面说的很清楚了,这里 ...
- Visual Studio 2017 初次体验
在初次体验中遇到以下问题以及技巧 1. 在出现红色波浪线时为出现错误语法,将鼠标移动到相应位置可以获得相关错误信息 2.在编写代码过程中,行号上出现的小黄灯可以有提示信息 3.List 与 Array ...
- Total Commander的初次体验
从汉化新世纪下载到最新的TC张学思版后,运行文件只需依照其提示就可以完成该软件的安装.作为新手初次运行体验了以下功能: 一.目录跳转 1. 初次启动TC软件界面截图: 2. 按下Ctrl+d后,直接再 ...
- HashTable初次体验
用惯了数组.ArryList,初次接触到HashTable.Dictionary这种字典储存对于我来说简直就是高大上. 1.到底什么是HashTable HashTable就是哈希表,和数组一样,是一 ...
- 初次体验百度eCharts遇到的问题和解决方法
前言 上周在厌烦Highchart下,体验了下百度的eCharts,支持IE6.7.8+外,对数据在线编辑还有工具栏支持,体验时遇到了几个小问题,最近两天在尝试得到了一个解决方法. Tooltip时单 ...
- Thrift 个人实战--初次体验Thrift
前言: Thrift作为Facebook开源的RPC框架, 通过IDL中间语言, 并借助代码生成引擎生成各种主流语言的rpc框架服务端/客户端代码. 不过Thrift的实现, 简单使用离实际生产环境还 ...
- 基于winserver部署Apollo初次体验(附.net客户端demo)
前言 配置中心伴随着这几年分布式系统演变和微服务架构的兴起,已经成为必不可少的需求之一.试下一下如果哪天公司的所有应用服务,从公司服务器迁移到云服务,成千上万的配置,修改起来是多么耗时费劲的事(我们公 ...
随机推荐
- luogg_java学习_07_抽象类_接口_多态学习总结
这篇博客总结了半天,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 , 抽象 一种专门用来做父类,被继承的. (模板) 格式: abs ...
- 【转】zigbee协议的多种profile
- 《疯狂Java讲义》学习笔记——第2章 理解面向对象
面向对象的三种基本特征:继承,封装,多态 UML(统一建模语言) 2.1 面向对象 2.1.1 结构化程序设计简介 图2.1 结构化软件的逻辑结构示意图 从图2.1可以看出,结构化设计需要采用自顶向 ...
- DOM Scripting -- Web Design with JavaScript and the Document Object Model 第2版 读书笔记
1. childNodes nodeValue <p id="p1">hello p!</p> alert(document.getElementById ...
- 【JAVA并发编程实战】6、中断
所谓的中断操作:它并不会真正地中断一个正在运行的线程,而只是发出中断请求,然后由线程在下一个合适的时刻中断自己. 调用一次interrupt中断请求,再次调用就是把中断状态恢复 1.响应中断 处理中断 ...
- C程序范例(1)——学生管理系统”数组“实现
1.在写程序之前,我想告诉大家,这个程序初学者很可能可能看不懂,但是这很正常,因为这是我在学习完C语言之后写的.所以大家好好学习吧! 由于这是在我大一刚学到数组时编写的程序,有许多冗余的部分,但当时做 ...
- WCF入门教程1——WCF简要介绍
什么是WCF Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台. 整合了原有的windo ...
- GIS管网项目-flex/java
开发语言是flex.java,开发平台是myeclise.eclise,后台数据库是oracel或sqlserver,开发接口是arcgis api for flex,提供以下的功能: 1.应急指挥: ...
- AFNetworking 3.0 断点续传 使用记录
最近项目中用到了压缩包下载,使用AFNetworking 3.0 下载压缩包 支持断点续传 代码如下: #import "HDInternet_handler.h" #import ...
- compileDebugJavaWithJavac
学习笔记 compileDebugJavaWithJavac,缺少插件,在module app gradle文件最上面添加一段 apply plugin: 'me.tatarka.retrolambd ...