Spring文档学习

参考Spring Framework Documentation学习


1. IoC 容器

1.1 容器实例化

<beans>
<import resource="services.xml"/>
<import resource="resources/messageSource.xml"/>
<import resource="/resources/themeSource.xml"/> <bean id="bean1" class="..."/>
<bean id="bean2" class="..."/>
</beans>

注意:这里不建议resource那里使用classpath:URL的写法,因为运行时解决进程会选择最近的classpath根,然后查找它的父文件夹。类路径配置的改变可能会导致错误的路径,找不到对应的资源。

1.2 使用容器

ApplicationContext是高级工厂的接口,能够维护不同bean及其依赖项的注册表。

获取实例:

ApplicationContext T getBean(String name, Class<T> requiredType)

最灵活的变种是GenericApplicationContext与reader相结合(如XmlBeanDefinitionReader)

使用:

GenericApplicationContext context = new GenericApplicationContext();
new XmlBeanDefinitionReader(context).loadBeanDefinitions("services.xml", "daos.xml");
context.refresh();

1.3 Bean Overview

在容器内,bean对象表示为BeanDefinition,其中包含以下元数据:

  • 包限定的类名:通常情况是bean的实现类
  • Bean行为配置元素,指明bean在容器中如何表现,像scope,生命周期回调等等
  • 引用其他bean(称为合作者或依赖)
  • 新创建的对象里设置其他配置

BeanDefinition有以下属性:

Class
Name
Scope
Constructor arguments
Properties
Autowiring mode
Lazy initialization mode
Initialization method
Destruction Method

ApplicationContext允许由用户创建的对象的注册,通过ApplicationContext的getBeanFactory()方法返回DefaultListableBeanFactory。通过这个BeanFactory的registerSingleton()和registerBeanDefinition()方法。

需要ASAP注册Bean元数据和手动提供的单例实例,以便容器在自动装配(auto wire)和其他内省步骤期间正确推理它们。

1.3.1 Naming Beans

Bean命名约定:小写字母开头,驼峰命名。

Spring扫描时,对那些没有命名的bean生成名字,遵循以下原则:采用simple class name,首字母小写。但是特殊情况下,如果有多个字符,并且第一和第二个字母都是大写,则原有的写法会被保留。

当有多个系统的时候,简单的使用xml-based 即可完成别名操作。

1.3.2 实例化beans

bean定义实际上是创建一个或多个对象的配方。

class属性的两种使用方式:

  1. 通过反射调用构造函数,等同于new操作符
  2. 通过调用静态工厂方法创建bean。调用静态工厂方法返回的对象类型可能是同一个类也可能是完全不同的类。

内部类的话,class属性需要写二进制代码名,如:com.example.SomeThing$OtherThing

  • 利用构造函数实例化

    However, depending on what type of IoC you use for that specific bean, you may need a default (empty) constructor.

  • 利用静态工厂方法实例化

    如:

    <bean id="clientService"
    class="examples.ClientService"
    factory-method="createInstance"/>
  • 利用对象工厂方法实例化

    例如:

    <!-- the factory bean, which contains a method called createInstance() -->
    <bean id="serviceLocator" class="examples.DefaultServiceLocator">
    <!-- inject any dependencies required by this locator bean -->
    </bean> <!-- the bean to be created via the factory bean -->
    <bean id="clientService"
    factory-bean="serviceLocator"
    factory-method="createClientServiceInstance"/>

    注意:一个工厂类也可以包含多个工厂方法

    这种方法表明工厂bean本身可以通过依赖注入(DI)进行管理和配置

Spring文档学习的更多相关文章

  1. EasyUI文档学习心得

    概述 jQuery EasyUI 是一组基于jQuery 的UI 插件集合,它可以让开发者在几乎完全不需要CSS以及复杂的JS代码情况下完成美观且功能强大的Web界面. 本文主要说明一些如何利用Eas ...

  2. Spring Security 官网文档学习

    文章目录 通过`maven`向普通的`WEB`项目中引入`spring security` 配置 `spring security` `configure(HttpSecurity)` 方法 自定义U ...

  3. Cassandra1.2文档学习解读计划——为自己鼓劲

    最近想深入研究一下Cassandra,而Cassandra没有中文文档,仅有的一些参考书都是0.7/0.6版本的.因此有个计划,一边学习文档(地址:http://www.datastax.com/do ...

  4. 《MATLAB从入门到放弃》二维曲线和图形绘制基础(二):使用Help文档学习line、plot、plotyy、subplot、hold绘图函数

    目录: »  plot 最常用的二维曲线绘图函数 >  帮助文档 >  基本使用语法 >  线条的样式.符号和颜色调整 >  图形属性调整 >  使用图形句柄进行设置 » ...

  5. 这可能是最详细的 iOS 学习入门指南(含书目/文档/学习资料)

    1 零基础小白如何进行 iOS 系统学习 首先,学习目标要明确: 其次,有了目标,要培养兴趣,经常给自己一些正面的反馈,比如对自己的进步进行鼓励,在前期小步快走: 再次,学技术最重要的一点就是多动手. ...

  6. Spring 文档汇总

    Spring Batch - Reference Documentation Spring Batch 参考文档中文版 Spring Batch 中文文档 Table 2. JdbcCursorIte ...

  7. 通过程序校验xml文档学习笔记

    校验xml文档,可以通过程序来校验,利用一段js代码即可. 各行代码的含义已经写出,运行这个html文件,检验如下xml代码: 结果如下: 如果xml文档出现错误: 结果如下: 其中,obj.asyn ...

  8. Nodejs v4.x.0API文档学习(2)Assert断言测试模块

    文档参考地址:https://nodejs.org/dist/latest-v4.x/docs/api/ Assert(断言) assert模块提供了一组简单的断言测试方法,可以拥有测试不变量.该模块 ...

  9. Nodejs v4.x.0API文档学习(1)简介

    文档参考地址:https://nodejs.org/dist/latest-v4.x/docs/api/ 简介 下面是用nodejs编写的一个web服务的例子,返回"Hello World& ...

随机推荐

  1. 并发编程-concurrent指南-原子操作类-AtomicInteger

    在java并发编程中,会出现++,--等操作,但是这些不是原子性操作,这在线程安全上面就会出现相应的问题.因此java提供了相应类的原子性操作类. 1.AtomicInteger

  2. django ORM中的RelatedManager(关联管理器)

    关联管理器应用在 一对多的表 或者 多对多的表 多对多表中的用法: 在多对多的表中 正向查询 #基于对象的查询 #正查 # author_obj = Author.objects.get(id=1) ...

  3. 数字IC前后端设计中的时序收敛(五)--Max Transition违反的修复方法

    本文转自:自己的微信公众号<数字集成电路设计及EDA教程> 里面主要讲解数字IC前端.后端.DFT.低功耗设计以及验证等相关知识,并且讲解了其中用到的各种EDA工具的教程. 考虑到微信公众 ...

  4. 2017提高组D1T1 洛谷P3951 小凯的疑惑

    洛谷P3951 小凯的疑惑 原题 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想 ...

  5. FTP工具便携版 FileZilla 3.38.0

    FileZilla 客户端是一个快速可靠的.跨平台的FTP,FTPS和SFTP客户端.具有图形用户界面(GUI)和很多有用的特性.由NoCmd提供的 FileZilla Client 中文便携版,具有 ...

  6. Vue快速学习_第三节

    过滤器 局部过滤器(组件内部使用的过滤器,跟django的很像, filters: {过滤器的名字: {function(val, a,b){}}} 全局过滤器(全局过滤器,只要过滤器一创建,在任何组 ...

  7. HTML连载23-属性选择器(上)

    一.属性选择器 1. (1)定义:根据指定的 属性名称找到对应的标签,然后设置属性 (2)格式:标签[属性=值]:{属性:值:] 注意:前一个值是不带引号的 (3)例子: <style> ...

  8. Go语言设计模式汇总

    目录 设计模式背景和起源 设计模式是什么 Go语言模式分类 个人观点 Go语言从面世就受到了业界的普遍关注,随着区块链的火热Go语言的地位也急速蹿升,为了让读者对设计模式在Go语言中有一个初步的了解和 ...

  9. ps aux | grep "svnserve" | cut -c 9-15 | xargs kill -9

    ps aux | grep "svnserve" | cut -c 9-15 | xargs kill -9

  10. NOIP2018普及T4暨洛谷P5018 对称二叉树题解

    题目链接:https://www.luogu.org/problemnew/show/P5018 花絮:这道题真的比历年的t4都简单的多呀,而且本蒟蒻做得出t4做不出t3呜呜呜... 这道题可以是一只 ...