1,spring ioc的整体流程,xml配置

spring ioc初始化的流程结合上图
步骤编号 完成的工作
1 spring容器读取配置文件,解析称注册表
2 根据注册表,找到相应的bean实现类实例化bean
3 把实例化之后的bean放到spring容器中
4 spring开放准备好的bean供程序使用

配置方法:

常见的自定义命名空间:

增加自定义的命名空间很easy,如果所示,独家秘籍····

spring的常见的自定义命名空间
简称 说明
beans 配置bean
aop aop的配置
tx 声明式事物
mvc mvc的配置
util 简化某些标准配置
jee java EE的EJB,jndi
jdbc 配置数据库提供的schema
jms jms配置
lang 支持Jruby,Groovy的配置
oxm xml映射的配置
task 任务调度的配置
tool 有用工具定义的配置

2,依赖注入,注入参数,方法注入

一般配置bean指定id,name不推荐使用;

依赖注入主要有两种,即属性注入和构造函数注入,工厂方法注入,具体选择视实际情况来;

属性注入:在xml中的bean节点中,通过<property name="xxx" value="xxx"/> 属性设置方法的前两个字符要全部大写或者小写;

构造函数注入:在xml中的bean节点中,通过<constructor-arg index="n" type="XXX" value="XXX"/>,对于构造函数的循环依赖,把其中一个改造成属性注入即可解决;

工厂方法注入:通过属性 factory-bean factory-method指定

注入参数:

字面值直接使用<value>来指定,特殊字符&xxx;来解决;比如大于 &lt; 小于 &gt; 连字符 &amp; 单引号 &apos;双引号   &quot;

引用<ref bean="xxx"/> 引用存在于本配置文件或者父配置文件中;

内部引用可直接定义bean

特殊的null值通过<null>来指定

支持级联的属性赋值;

集合类型支持到List,Set,Map,Properties

强类型同map

集合还可通过 merge 属性指定合并,可通过util命名空间来简化集合配置,使用p空间来简化属性配置;

自动装配:在bean中指定 autowire 类型可以是 byName,byType,constructor,autodetect,不推荐自动装配

方法注入:

lookup,一般用在单例的属性是原型的实例,视情况需要是否引入CGLib依赖

<replace-method  name="方法名" replacer="替换接口实现类"> 可以替换方法,接口是MethodReplacer;

3,bean之间的关系

bean之间的关系分三类,分别是继承,依赖,引用

继承通过在父bean中加个 abstract属性,子bean中加一个parent属性;

依赖通过增加属性 depends-on="xxx"

引用通过<idref bean="xxx">

4,整合配置文件,bean的作用域,FactoryBean

通过在主配置文件中增加<import resource="classpath:XXXX"/> 来整合

bean的作用域,如果是web应用,除了singleton和prototype之外还有request,session,globalSession

singleton是单例无状态的,spring的dao都可以采用单例的模式,spring放在了容器的缓存池里面;

prototype每次都会实例化一个对象;

要在web环境下使用其它的三种作用域,需要在web.xml中配置一个RequestContextListener;

如果单例的或者原型的实例依赖web作用域的某个实例,在web作用的bean里面增加<aop:scoped-proxy/>

如果实例化比较复杂,可以使用FactoryBean来定义实例;

5,基于注解的配置

四类注解来标识bean

@Component 标识一般的bean

@Repository 标识dao

@Service       标识service

@Controller   标识控制层

配置扫描:<context:compnent-scan base-package="xxx" resource-patter="xxx"> 它的过滤方式有多种,annotation,assignable,aspectj,regex,custom;

自动注入:

@Autowired 有required属性标识缺失是否报错,Qualifier标识名称;可对属性和方法进行标注;

其它的比如:@Inject @Resource功能一样,但是功能没它强大,可忽略;

生命周期的支持:通过@PostConstruct 来定义init-method ,通过@PreDestroy来定义 destroy-method

@Scope来定义作用域

@Value来引用其它的bean的属性

@Lazyl来定义是否延迟加载

6,基于java类的配置

这里省略,用的不多;

7,小结

最常用的是采用xml配置第三方的bean工具,本应用开发采用注解来配置;

spring笔记6 spring IOC的中级知识的更多相关文章

  1. spring笔记3 spring MVC的基础知识3

    4,spring MVC的视图 Controller得到模型数据之后,通过视图解析器生成视图,渲染发送给用户,用户就看到了结果. 视图:view接口,来个源码查看:它由视图解析器实例化,是无状态的,所 ...

  2. Spring笔记(6) - Spring的BeanFactoryPostProcessor探究

    一.背景 在说BeanFactoryPostProcessor之前,先来说下BeanPostProcessor,在前文Spring笔记(2) - 生命周期/属性赋值/自动装配及部分源码解析中讲解了Be ...

  3. Spring笔记(4) - Spring的编程式事务和声明式事务详解

    一.背景 事务管理对于企业应用而言至关重要.它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性.就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到操作 ...

  4. Spring笔记(7) - Spring的事件和监听机制

    一.背景 事件机制作为一种编程机制,在很多开发语言中都提供了支持,同时许多开源框架的设计中都使用了事件机制,比如SpringFramework. 在 Java 语言中,Java 的事件机制参与者有3种 ...

  5. Spring笔记1——Spring起源及其核心技术

    Spring的作用 当我们使用一种技术时,需要思考为什么要使用这门技术.而我们为什么要使用Spring呢?从表面上面SSH这三大框架中,Struts是负责MVC责任的分离,并且提供为Web层提供诸如控 ...

  6. spring笔记5 spring IOC的基础知识1

    1,ioc的概念 Inverse of control ,控制反转,实际的意义是调用类对接口实现类的依赖,反转给第三方的容器管理,从而实现松散耦合: ioc的实现方式有三种,属性注入,构造函数注入,接 ...

  7. Spring:笔记整理(2)——IOC容器

    IOC容器 什么是IOC 说明 IOC ,全称Inversion of control,即,控制反转,是一种设计思想. 控制: 在Java中,IOC意味着:你将设计好的对象交给容器控制,而不是传统的在 ...

  8. spring笔记4 spring MVC的基础知识4

    //todo 5,spring MVC的本地化解析,文件上传,静态资源处理,拦截器,异常处理等 spring MVC 默认使用AcceptHeaderLocalResolver,根据报文头的Accep ...

  9. spring笔记2 spring MVC的基础知识2

    2,spring MVC的注解驱动控制器,rest风格的支持 作为spring mvc的明星级别的功能,无疑是使得自己的code比较优雅的秘密武器: @RequestMapping处理用户的请求,下面 ...

随机推荐

  1. H5 canvas的 width、height 与style中宽高的区别

    Canvas 的width height属性 1.当使用width height属性时,显示正常不会被拉伸:如下 <canvas id="mycanvas" width=&q ...

  2. 如何通过Git GUI将自己本地的项目上传至Github

    最近在学习node.js和react,顺便复习了下AngluarJS相关的东西,写了些小demo想放在GitHub上,之前仅限于只申请了GitHub账号从没用过,今天花半天时间查资料认真学习Githu ...

  3. i++、++i 、i--、--i

    总结: i++ 先用后加, ++i先加后用: i--先用后减, --i先减后用: //int i = 1; //Console.WriteLine(i);//1 //Console.WriteLine ...

  4. Windows下Redis缓存服务器的使用 .NET StackExchange.Redis Redis Desktop Manager

    Redis缓存服务器是一款key/value数据库,读110000次/s,写81000次/s,因为是内存操作所以速度飞快,常见用法是存用户token.短信验证码等 官网显示Redis本身并没有Wind ...

  5. SQL SERVER导入数据到ORACLE的方法总结

    我们偶尔会有将数据从SQL SERVER导入到ORACLE当中的这种需求,那么这种跨数据库导数有那些方法呢?这些方法又有那些利弊呢? 下面比较肤浅的总结了一些可行的方法. 1:生成SQL脚本然后去OR ...

  6. Apache2.4:AH01630 client denied by server configuration

    问题说明:Apache服务总共有4个,是为了防止单点故障和负载均衡,负载均衡控制由局方的F5提供. 访问的内容在NAS存储上,现象是直接访问每个apache的服务内容都是没有问题,但是从负载地址过来的 ...

  7. BZOJ 2756: [SCOI2012]奇怪的游戏 [最大流 二分]

    2756: [SCOI2012]奇怪的游戏 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 3352  Solved: 919[Submit][Stat ...

  8. linux-centos在VM中的网络配置

    1.自动获取IP地址 虚拟机使用桥接模式,相当于连接到物理机的网络里,物理机网络有DHCP服务器自动分配IP地址. #dhclient 自动获取ip地址命令 #ifconfig 查询系统里网卡信息,i ...

  9. requests源码阅读学习笔记

    0:此文并不想拆requests的功能,目的仅仅只是让自己以后写的代码更pythonic.可能会涉及到一部分requests的功能模块,但全看心情. 1.另一种类的初始化方式 class Reques ...

  10. 解除win7网络限速.

    在电脑刚买或者系统重装了的时候,win7系统会默认限制20%的网络速度,限制了我们的上网速度,我们可以解决这个限制,让上网变得更快 下面是操作步骤 1.开始>运行 2.输入以下命令,然后确定 g ...