一、Spring容器接口关系

容器是Spring框架的核心,Spring容器就是一个巨大的工厂。Spring容器使用Ioc(控制反转(Inversion of
Control )管理所有组成应用系统的组件。

Spring容器会使用XML解析器读取改属性值,并利用反射来创建该实现类的实例。

Spring有两个核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口。它们都可以代表Spring容器。Spring容器是生成Bean实例的工厂,并管理容器中的Bean。Bean是Spring管理的基本单元。

创建BeanFactory实例时,必须使用Spring容器管理的Bean详细配置信息(XML配置文件)。XML配置文件通常使用Resource对象传入。
Resource接口是Spring提供的资源访问接口,通过使用该接口,Spring能以简单,透明的方式访问子盘,类路径,已经网络上的资源。

--------------------------------------------------------------------------------------------------------------------------

二、Spring容器加载spring的配置文件方式

A、大部分Java
EE应用,在启动Web应用时自动加载Application实例。对于独立的应用程序,可通过如下方法来实例化BeanFactory。
1.
 //搜索当前文件路径下的beans.xml文件,创建Resource对象
 InputStreamResource isr = new
FileSystemResource("beans.xml");
 //以Resource对象作为参数,创建BeanFactory实例
 XmlBeanFactory factory = new
XmlBeanFactory(isr);
2.
 //搜索类加载路径,以类加载路径下的beans.xml文件创建Resource对象
 ClassPathResource res = new
ClassPathResource("beans.xml");
 //以Resource对象为参数,创建BeanFactory实例
 XmlBeanFactory factory = new
XmlBeanFactory(res);
-----------------------------------------------------------
 B、ApplicationContext允许以声明式方式操作容器,无需手动创建它。可利用如ContextLoader得支持类,在Web应用启动时自动创建ApplicationContext。当然,也可以采用编程方式创建ApplicationContext.

除了提供BeanFactory所支持的全部功能外,ApplicationContext还有如下额外功能:
1.ApplicationContext继承MessageSource接口,因此提供国际化支持。
2.资源访问,比如URL和文件
3.事件机制
4.载入多个配置文件。

ApplicationContext经常用到的三个实现:

1.ClassPathXmlApplicationContext:从类路径中的XML文件载入上下文定义信息。把上下文定义文件当成类路径资源。

2.FileSystemXmlApplicationContext:从文件系统中的XML文件载入上下文定义信息。

3.XmlWebApplicationContext:从Web系统中的XML文件载入上下文定义信息。

 实例化Spring容器常用的两种方式:
方法一:
在类路径下寻找配置文件来实例化容器
ApplicationContext ctx = new ClassPathXmlApplicationContext(new
String[]{"beans.xml"});
方法二:
在文件系统路径下寻找配置文件来实例化容器
ApplicationContext ctx = new FileSystemXmlApplicationContext(new
String[]{“d:\\beans.xml“});
然后:
   OrderService service = (
OrderService)ctx.getBean("personService");    


   
getBean()方法的参数可以指定id属性,也可以指定name属性。
id通常为有效的标识符(即以字母或下划线开头后面跟着字母数字或下划线)。  如:id="personServiceBean"
name可以为非标识符。 如:name="person.server#bean“
无论按照id属性还是name属性找到即可

Spring的配置文件可以指定多个,可以通过String数组传入。

--------------------------------------------------------------------------------------------------------------------------

注意:默认情况下会在容器启动时初始化bean,且只实例化一次即单例模式,但我们可以指定Bean节点的lazy-init=“true”来延迟初始化bean,这时候,只有第一次获取bean时才初始化bean。如:

<bean id="xxx"
class="cn.itcast.OrderServiceBean"

lazy-init="true"/>   

如果想对所有bean都应用延迟初始化,可以在根节点beans设置default-lazy-init=“true“,如下:
    <beans default-lazy-init="true“
...>

如果想每次从容器获取bean都是新的对象,可设置:
 <bean
id=“” class=“”  scope=“prototype”/>

Spring学习2—Spring容器的更多相关文章

  1. Spring学习(六)-----Spring使用@Autowired注解自动装配

    Spring使用@Autowired注解自动装配 在上一篇 Spring学习(三)-----Spring自动装配Beans示例中,它会匹配当前Spring容器任何bean的属性自动装配.在大多数情况下 ...

  2. Spring学习(十一)-----Spring使用@Required注解依赖检查

    Spring学习(九)-----Spring依赖检查 bean 配置文件用于确定的特定类型(基本,集合或对象)的所有属性被设置.在大多数情况下,你只需要确保特定属性已经设置但不是所有属性.. 对于这种 ...

  3. Spring学习笔记--spring+mybatis集成

    前言: 技术的发展, 真的是日新月异. 作为javaer, 都不约而同地抛弃裸写jdbc代码, 而用各种持久化框架. 从hibernate, Spring的JDBCTemplate, 到ibatis, ...

  4. spring学习12 -Spring 框架模块以及面试常见问题注解等

    以下为spring常见面试问题: 1.Spring 框架中都用到了哪些设计模式? Spring框架中使用到了大量的设计模式,下面列举了比较有代表性的: 代理模式—在AOP和remoting中被用的比较 ...

  5. Spring学习【Spring概述】

    从本文開始,我们就要一起学习Spring框架,首先不得不说Spring框架是一个优秀的开源框架. 当中採用IoC原理实现的基于Java Beans的配置管理和AOP的思想都是非常值得学习与使用的.以下 ...

  6. Spring学习笔记—Spring之旅

    1.Spring简介     Spring是一个开源框架,最早由Rod Johnson创建,并在<Expert One-on-One:J2EE Design and Development> ...

  7. spring学习(三) ———— spring事务操作

    前面一篇博文讲解了什么是AOP.学会了写AOP的实现,但是并没有实际运用起来,这一篇博文就算是对AOP技术应用的进阶把,重点是事务的处理. --wh 一.jdbcTemplate 什么是JdbcTem ...

  8. spring 学习 一 spring 介绍

    Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架. Spring ...

  9. spring学习之spring入门

    一 spring的基础 1:什么是spring spring是由Rod Johnson组织和开发的一个分层 的Java SE/EE 一站式轻量级开源框架,它以Ioc(控制反转)和 AOP(面向切面编程 ...

  10. Spring学习记录(二)---容器和bean属性配置

    下载spring包,在eclipse搭建spring环境. 这步我在eclipse中无法导入包,看网上的: http://sishuok.(和谐)com/forum/blogPost/list/242 ...

随机推荐

  1. scanf和cin的差异

    scanf和cin的差异 引例:http://www.cnblogs.com/shenben/p/5516996.html 大家都知道,在C++中有两种输入.输出方式—scanf和cin,但是,它们之 ...

  2. C语言 百炼成钢6

    //题目16:输入两个正整数m和n,求其最大公约数和最小公倍数. #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include< ...

  3. 老王Python培训视频教程(价值500元)【基础进阶项目篇 – 完整版】

    老王Python培训视频教程(价值500元)[基础进阶项目篇 – 完整版] 教学大纲python基础篇1-25课时1.虚拟机安装ubuntu开发环境,第一个程序:hello python! (配置开发 ...

  4. Android屏蔽返回键

    @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK) ...

  5. linux实践——简单程序破解

    一.运行login可执行程序,屏幕显示需要输入密码,随便输入一串字符,结果是Drop dead! 二.objdump -d login,对login进行反汇编,找到main函数,找到含有scanf的那 ...

  6. ios——视频 MPMoviePlayerController的使用(支持本地和网络)

    视频 MPMoviePlayerController 在iOS中播放视频可以使用MediaPlayer.framework种的MPMoviePlayerController类来完成,它支持本地 视频和 ...

  7. C#基础之Attribute

    1.什么是Attribute 特性简单点理解就是为目标元素添加一些附加信息,这些附加信息我们可以在运行期间以反射的方式拿到.目标元素指的是程序集.模块.类.参数.属性等元素,附加信息指的是特性类中的成 ...

  8. 关于json 与 Request Header 的Content-Type 一些关系。

    由于最近遇到关于,ashx文件ajax解析参数的问题.查询网上很多资料后,已经解决. 鉴于网上已经足够多的,关于这个问题的文章.大部分内容来自互联网,我这里只是做一些整理和记录.特此说明并非原创. C ...

  9. mac版beyond compare 4 中对比class文件

    http://www.scootersoftware.com/download.php?zz=moreformats 这个网址中没有mac版本的class文件对比的file format.只能自己造了 ...

  10. linux编译ruby1.8.7 出现OPENSSL错误

    安装ruby-1.8.7出现编译错误.如下: ossl_pkey_ec.c:815: error: ‘EC_GROUP_new_curve_GF2m’ undeclared (first use in ...