Spring之Ioc
Spring的特性
>> 轻量级(Lightweight)相较于EJB而言Spring是轻量级的容器,不依赖任何web容器
>> 容器(Container) Spring本身不具备任何功能,仅仅是对JavaBean进行生命周期和读写的管理
>> IOC( Inversion of Control )Spring实现的核心是IOC,即控制反转,完全由Spring容器负责维护资源间的依赖关系
>> AOP( Aspect-oriented programming )AOP框架是Spring框架中的一个子框架,以切面编程模式在不更改源代码的情况下增加新的功能
Spring 的核心概念是 IoC,IoC 的抽象概念是“依赖关系的转移”,像是“高层模组不应该依赖低层模组,而是模组都必须依赖于抽象”是 IoC 的一种表现,“实现必须依赖抽象,而不是抽象依赖实现”也是 IoC 的一种表现,“应用程序不应依赖于容器,而是容器服务于应用程序”也是 IoC 的一种表现。
IoC 全名 Inversion of Control,如果中文硬要翻译过来的话,就是“控制反转”。初看 IoC,从字面上不容易了解其意义,要了解 IoC,要先从 Dependency Inversion 开始了解,也就是依赖关系的反转。
IOC通过字面翻译即控制反转,在程序中又称为依赖注入
如一个普通的类:
public class User {
private String name;
public void setName(String name){……}
public String getName(){……}
}
在这个类中定义的name属性和get set方法在我们看来已经是一种固定的编程模式思路了,属性和类是一个必然的联系
我们现在提出的JAVA开发理念应该是:Write once only once
从中可以看出其实这个类的属性和类之间还是存在很强的耦合性,如果需要更改name属性必须使用以下方式修改
直接在类内部修改
在外部通过setName方法更改
Spring提出的IOC概念即对象的控制权进行转移,原本我们需要通过类自身对内容进行修改,通过IOC的反转可以交由外部对其自身内容进行更改。
Spring通过三种实现依赖注入接口注入 set注入 构造器注入
ApplicationContext.xml是Spring的核心配置文件,所有容器内组件的管理都依赖该配置文件,要实现IOC也需要在配置文件中写入信息
<bean id=“user” class=“com.niit.User”></bean>
<bean ……>
……
Spring就是管理bean的容器框架
set注入:
<bean id=“user” class=“com.niit.User”>
<property name=“name”>
<value>Tom</value>
</property>
<property name=“pwd”>
<value>123</value>
</property>
</bean>
通过在配置文件中的写入,此时User类中各个属性的控制权就转移给了Spring容器,由容器读取配置文件设置类的属性值,从而达到控制反转的效果。
如何对配置文件进行读取呢?
Resource rs=new FileSystemResource(“src/ApplicationResource.xml”);
BeanFactory factory=new XmlBeanFactory(rs);
User user=(User)factory.getBean(“user”);
FileSystemResource对象用来获取xml文件资源
XmlBeanFactory是BeanFactory的实例,使用工厂模式获取对XML进行解析管理,负责读取Bean定义档,管理对象的载入、生成,对象之间的关系维护,负责Bean的生命周期,对于简单的应用程序来说,使用 BeanFactory就已经足够,但是若要利用到Spring在框架上的一些功能以及进阶的容器功能,则可以使用 ApplicationContext对象
ApplicationContext相较于BeanFactory功能相似,但能提供更强大的框架支持
使用ApplicationContext操作:
ApplicationContext ctx=new ClassPathXmlApplicationContext(“ApplicationContext.xml”);
User user=(User)ctx.getBean(“user”);
ApplicationContext接口可以通过如下实现类操作:
FileSystemXmlApplicationContext 从文件系统中读取配置文件
ClassPathXmlApplicationContext 从项目路径中读取配置文件
构造器注入:
需要类中存在带参构造方法
public class User {
public User(String name,String pwd) {
this.name=name;
this.pwd=pwd;
}
}
接口注入:
<bean id=“tool” class=“com.niit.tool”>
</bean>
<bean id=“user” class=“com.niit.User”>
<property name=“tool”>
<ref bean=“tool”/>
</property>
</bean>
主要要点:
Spring中通过BeanFactory或者ApplicationContext获取的Bean的实例都是单例模式(Singleton),对于多线程的程序必须要主要安全问题,可以使每次获取Bean的实例时都产生一个新的实例。
<bean id=“user” class=“com.niit.User” singleton=“false”> </bean>
Spring之Ioc的更多相关文章
- Spring的IOC和AOP之深剖
今天,既然讲到了Spring 的IOC和AOP,我们就必须要知道 Spring主要是两件事: 1.开发Bean:2.配置Bean.对于Spring框架来说,它要做的,就是根据配置文件来创建bean实例 ...
- Spring框架IOC容器和AOP解析
主要分析点: 一.Spring开源框架的简介 二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置 一.S ...
- Spring总结—— IOC 和 Bean 的总结
一.Spring 官方文档中给出的 Spring 的整体结构. 二.我自己所理解的 Spring 整体结构图. 三.本次总结 Spring 核心部分 1.从上面图中可以看出,Beans 和 Conte ...
- spring的IOC和AOP
spring的IOC和AOP 1.解释spring的ioc? 几种注入依赖的方式?spring的优点? IOC你就认为他是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是 ...
- spring容器IOC创建对象<二>
问题?spring是如何创建对象的?什么时候创建对象?有几种创建方式?测试对象是单例的还是多例的 ?对象的初始化和销毁? 下面的四大模块IOC的内容了!需要深刻理解 SpringIOC定义:把对象的创 ...
- Spring中IoC的入门实例
Spring中IoC的入门实例 Spring的模块化是很强的,各个功能模块都是独立的,我们可以选择的使用.这一章先从Spring的IoC开始.所谓IoC就是一个用XML来定义生成对象的模式,我们看看如 ...
- Spring中IOC和AOP的详细解释
我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂模式和代理模式. IOC就是典型的工厂模式,通过s ...
- Spring的IoC应用
IoC(Inversion of Control,控制反转) Spring的IoC应用是其框架的最大的特点,通过依赖注入可以大大降低代码之间的耦合度,从而实现代码和功能之间的分离.在代码中可以不直接和 ...
- Spring 实践 -IoC
Spring 实践 标签: Java与设计模式 Spring简介 Spring是分层的JavaSE/EE Full-Stack轻量级开源框架.以IoC(Inverse of Control 控制反转) ...
- 挖坟之Spring.NET IOC容器初始化
因查找ht项目中一个久未解决spring内部异常,翻了一段时间源码.以此文总结springIOC,容器初始化过程. 语言背景是C#.网上有一些基于java的spring源码分析文档,大而乱,乱而不全, ...
随机推荐
- hive创建索引
索引是hive0.7之后才有的功能,创建索引需要评估其合理性,因为创建索引也是要磁盘空间,维护起来也是需要代价的 创建索引 hive> create index [index_studentid ...
- 【xcode5的使用】
layout: post title: "WWDC 2013 Session笔记 - Xcode5和ObjC新特性" date: 2013-06-13 10:05 comments ...
- Python协程:从yield/send到async/await
这个文章理好了脉落. http://python.jobbole.com/86069/ 我练 习了一番,感受好了很多... Python由于众所周知的GIL的原因,导致其线程无法发挥多核的并行计算能力 ...
- mysql开发小结
目录 1. 使用mybatis操作mysql数据库SUM方法返回NULL解决 2. limit m,n 1. 使用mybatis操作mysql数据库SUM方法返回NULL解决解决方案一: SELECT ...
- dcraw源码解析
dcraw源码解析 Author:Maddock Date:2015-04-22 转载请注明出处: 首先吐槽一点: 程序中使用了相当多的全局变量, 看的人头大.全局变量的坏处参看 http://wen ...
- PS 使用的常用命令
本文记载一些简单的PS使用的命令 1. photoshop 画完矩形调整大小方法: a.画完矩形. b.按下Ctrl+T. c.拖边线上的小正方形就是了. 2. 画圆或者矩形时,按住shift 可以变 ...
- Daily Scrum Meeting ——NinthDay
一.Daily Scrum Meeting照片 二.Burndown Chart 三.项目进展 1.用户管理 2.下拉框与界面的整合 四.问题困难 黄志明(PM):Android Studio自带的S ...
- PDA移动POS终端系统,实现专柜或店铺的收货、零售、盘点通过无线网络直接连接总部中央数据库,实现高效安全的移动供应链管理
利用PDA移动终端,实现专柜或店铺的收货.零售.盘点等一体化操作,通过无线网络直接连接总部中央数据库,实现高效安全的移动供应链管理. · PDA订货会应用解决方案利用PDA或电脑系统,在订货会现场直接 ...
- Pig语言基础-【持续更新中】
***本文参考了Pig官方文档以及已有的一些博客,并加上了自己的一些知识性的理解.目前正在持续更新中.*** Pig作为一种处理大规模数据的高级查询语言,底层是转换成MapReduce实现的, ...
- XIII Open Cup named after E.V. Pankratiev. GP of Ukraine
A. Automaton 后缀自动机可以得到$O(2n+1)$个状态,但是后缀自动机会拒绝接收所有不是$S$的子串的串,所以在建立后缀自动机的时候不复制节点即可得到$n+1$个状态的DFA. #inc ...