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. Java 为值传递而不是引用传递

    ——reference Java is Pass by Value and Not Pass by Reference 其实这个问题是一个非常初级的问题,相关的概念初学者早已掌握,但是时间长了还是容易 ...

  2. 微信小程序开发日记——高仿知乎日报(上)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...

  3. BPM应用开发解决方案分享

    一.需求分析企业整体管理是一个完整的体系,如果 把这个体系比做一个拼图,企业信息化通过各个业务系统覆盖了一部分业务. 企业通过采购实施通用软件的方式,覆盖了企业的核心业务和专业化业务然而系统只满足了部 ...

  4. Winserver2012下mysql 5.7解压版(zip)配置安装

    一.安装 下载mysqlzip版本mysql不需要运行可执行文件,解压即可,下载zip版本mysqlmsi版本mysql双击文件即可安装,相对简单,本文不介绍此版本安装 配置环境变量打开环境变量配置页 ...

  5. emmet,jade,haml, slim,less,sass,coffeescript等的实战优缺点

    摘要: 文章背景,来自于群内周五晚上的一次头脑风暴式的思维碰撞交流活动. 随着前端技术的蓬勃发展, 各种新技术随着生产力的需要不断的涌入我们的视野, 那今天探讨的话题是这些新时代的前端兵器谱: 一. ...

  6. Linux下部署ASP.NET服务连接oracle遇到的问题记录

    一.如何卸载MONO Q:mono是linux系统上跨平台软件,卸载它有两种方式: 1.知道mono安装路径,安装原来的路径直接覆盖安装(最为简单): 2.不知道mono安装路径,首先通过sudo f ...

  7. AutoMapper(五)

    返回总目录 Dynamic和ExpandoObject映射 AutoMapper不用任何配置就可以从dynamic(动态)对象映射或映射到dynamic对象. namespace FifthAutoM ...

  8. Spark核心作业调度和任务调度之DAGScheduler源码

    前言:本文是我学习Spark 源码与内部原理用,同时也希望能给新手一些帮助,入道不深,如有遗漏或错误的,请在原文评论或者发送至我的邮箱 tongzhenguotongzhenguo@gmail.com ...

  9. windows下配置apache+php环境

    PHP安装 由于windows下php扩展5.6的多余7.0,故以php5.6为开发环境.如果对扩展要求不高,可以使用php7,安装过程类似. 约定: 环境安装目录: D:/phpsetup/ |-- ...

  10. delete

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...