spring笔记6 spring IOC的中级知识
1,spring ioc的整体流程,xml配置

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

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

| 简称 | 说明 |
| 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;来解决;比如大于 < 小于 > 连字符 & 单引号 '双引号 "
引用<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的中级知识的更多相关文章
- spring笔记3 spring MVC的基础知识3
4,spring MVC的视图 Controller得到模型数据之后,通过视图解析器生成视图,渲染发送给用户,用户就看到了结果. 视图:view接口,来个源码查看:它由视图解析器实例化,是无状态的,所 ...
- Spring笔记(6) - Spring的BeanFactoryPostProcessor探究
一.背景 在说BeanFactoryPostProcessor之前,先来说下BeanPostProcessor,在前文Spring笔记(2) - 生命周期/属性赋值/自动装配及部分源码解析中讲解了Be ...
- Spring笔记(4) - Spring的编程式事务和声明式事务详解
一.背景 事务管理对于企业应用而言至关重要.它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性.就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到操作 ...
- Spring笔记(7) - Spring的事件和监听机制
一.背景 事件机制作为一种编程机制,在很多开发语言中都提供了支持,同时许多开源框架的设计中都使用了事件机制,比如SpringFramework. 在 Java 语言中,Java 的事件机制参与者有3种 ...
- Spring笔记1——Spring起源及其核心技术
Spring的作用 当我们使用一种技术时,需要思考为什么要使用这门技术.而我们为什么要使用Spring呢?从表面上面SSH这三大框架中,Struts是负责MVC责任的分离,并且提供为Web层提供诸如控 ...
- spring笔记5 spring IOC的基础知识1
1,ioc的概念 Inverse of control ,控制反转,实际的意义是调用类对接口实现类的依赖,反转给第三方的容器管理,从而实现松散耦合: ioc的实现方式有三种,属性注入,构造函数注入,接 ...
- Spring:笔记整理(2)——IOC容器
IOC容器 什么是IOC 说明 IOC ,全称Inversion of control,即,控制反转,是一种设计思想. 控制: 在Java中,IOC意味着:你将设计好的对象交给容器控制,而不是传统的在 ...
- spring笔记4 spring MVC的基础知识4
//todo 5,spring MVC的本地化解析,文件上传,静态资源处理,拦截器,异常处理等 spring MVC 默认使用AcceptHeaderLocalResolver,根据报文头的Accep ...
- spring笔记2 spring MVC的基础知识2
2,spring MVC的注解驱动控制器,rest风格的支持 作为spring mvc的明星级别的功能,无疑是使得自己的code比较优雅的秘密武器: @RequestMapping处理用户的请求,下面 ...
随机推荐
- 在centos7上安装Jenkins
在centos7上安装Jenkins 安装 添加yum repos,然后安装 sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins ...
- .NET 基础 一步步 一幕幕[面向对象之对象和类]
对象和类 本篇正式进入面向对象的知识点简述: 何为对象,佛曰:一花一世界,一木一浮生,一草一天堂,一叶一如来,一砂一极乐,一方一净土,一笑一尘缘,一念一清静.可见"万物皆对象". ...
- H3 BPM让天下没有难用的流程之产品概述
一.产品简介 BPM(Business Process Management),是指根据业务环境的变化,推进人与人之间.人与系统之间以及系统与系统之间的整合及调整的经营方法与解决方案的IT工具. H3 ...
- 仿陌陌的ios客户端+服务端源码项目
软件功能:模仿陌陌客户端,功能很相似,注册.登陆.上传照片.浏览照片.浏览查找附近会员.关注.取消关注.聊天.语音和文字聊天,还有拼车和搭车的功能,支持微博分享和查找好友. 后台是php+mysql, ...
- D3.js学习(六)
上节我们学习了如何绘制多条曲线, 以及给不同的曲线指定不同的坐标系.在这节当中,我们会对坐标轴标签相关的处理进行学习.首先,我们来想一个问题, 如何我们的x轴上的各个标签的距离比较近,但是标签名又比较 ...
- 面向未来的友好设计:Future Friendly
一年前翻译了本文的一部分,最近终于翻译完成.虽然此设计思想的提出已经好几年了,但是还是觉得应该在国内推广一下,让大家知道“内容策略”,“移动优先”,“响应式设计”,“原子设计”等设计思想和技术的根源. ...
- XSS 前端防火墙 —— 可疑模块拦截
上一篇介绍的系统,已能预警现实中的大多数 XSS 攻击,但想绕过还是很容易的. 由于是在前端防护,策略配置都能在源代码里找到,因此很快就能试出破解方案.并且攻击者可以屏蔽日志接口,在自己电脑上永不发出 ...
- Ford-Fulkerson 最大流算法
流网络(Flow Networks)指的是一个有向图 G = (V, E),其中每条边 (u, v) ∈ E 均有一非负容量 c(u, v) ≥ 0.如果 (u, v) ∉ E 则可以规定 c(u, ...
- 写自己的Socket框架(一)
本系列仅介绍可用于生产环境的C#异步Socket框架,如果您在其他地方看到类似的代码,不要惊讶,那可能就是我在参考开源代码时,直接“剽窃”过来的. 1.在脑海里思考一下整个socket的链接的处理流程 ...
- ASP.NET MVC Model绑定(六)
ASP.NET MVC Model绑定(六) 前言 前面的篇幅对于IValueProvider的使用做个基础的示例讲解,但是没并没有对 IValueProvider类型的实现做详细的介绍,然而MVC框 ...