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的更多相关文章

  1. Spring的IOC和AOP之深剖

    今天,既然讲到了Spring 的IOC和AOP,我们就必须要知道 Spring主要是两件事: 1.开发Bean:2.配置Bean.对于Spring框架来说,它要做的,就是根据配置文件来创建bean实例 ...

  2. Spring框架IOC容器和AOP解析

    主要分析点: 一.Spring开源框架的简介  二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置  一.S ...

  3. Spring总结—— IOC 和 Bean 的总结

    一.Spring 官方文档中给出的 Spring 的整体结构. 二.我自己所理解的 Spring 整体结构图. 三.本次总结 Spring 核心部分 1.从上面图中可以看出,Beans 和 Conte ...

  4. spring的IOC和AOP

     spring的IOC和AOP 1.解释spring的ioc? 几种注入依赖的方式?spring的优点? IOC你就认为他是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是 ...

  5. spring容器IOC创建对象<二>

    问题?spring是如何创建对象的?什么时候创建对象?有几种创建方式?测试对象是单例的还是多例的 ?对象的初始化和销毁? 下面的四大模块IOC的内容了!需要深刻理解 SpringIOC定义:把对象的创 ...

  6. Spring中IoC的入门实例

    Spring中IoC的入门实例 Spring的模块化是很强的,各个功能模块都是独立的,我们可以选择的使用.这一章先从Spring的IoC开始.所谓IoC就是一个用XML来定义生成对象的模式,我们看看如 ...

  7. Spring中IOC和AOP的详细解释

    我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂模式和代理模式. IOC就是典型的工厂模式,通过s ...

  8. Spring的IoC应用

    IoC(Inversion of Control,控制反转) Spring的IoC应用是其框架的最大的特点,通过依赖注入可以大大降低代码之间的耦合度,从而实现代码和功能之间的分离.在代码中可以不直接和 ...

  9. Spring 实践 -IoC

    Spring 实践 标签: Java与设计模式 Spring简介 Spring是分层的JavaSE/EE Full-Stack轻量级开源框架.以IoC(Inverse of Control 控制反转) ...

  10. 挖坟之Spring.NET IOC容器初始化

    因查找ht项目中一个久未解决spring内部异常,翻了一段时间源码.以此文总结springIOC,容器初始化过程. 语言背景是C#.网上有一些基于java的spring源码分析文档,大而乱,乱而不全, ...

随机推荐

  1. @Controller和@RestController的区别

    1. Controller, RestController的共同点 都是用来表示spring某个类的是否可以接收HTTP请求 2.  Controller, RestController的不同点 @C ...

  2. Linux网络管理1---(Linux配置IP地址,ifconfig、配置文件)

    1.Linux配置IP 地址 ifconfig命令临时配置IP 地址 ifconfig命令,最常用的功能是查看本机的网络的配置状态(当然也可以配置网络,不过是暂时性的),直接输入ifconfig命令就 ...

  3. Angular.element和$document的使用方法分析,代替jquery

    AngularJs是不直接操作DOM的,但是在平时的开发当中,我们有的时候还是需要操作一些DOM的,如果使用原生的JS的话操作过于麻烦,所以大家一般都是使用jQuery,jQuery虽然好用,但是An ...

  4. POJ 3261 Milk Patterns 后缀数组求 一个串种 最长可重复子串重复至少k次

    Milk Patterns   Description Farmer John has noticed that the quality of milk given by his cows varie ...

  5. LeetCode——Best Time to Buy and Sell Stock III (股票买卖时机问题3)

    问题: Say you have an array for which the ith element is the price of a given stock on day i. Design a ...

  6. webbench之使用(二)

    [root@lam7 ~]# webbench -helpwebbench [option]... URL -f|--force                Don't wait for reply ...

  7. 198个经典C#WinForm实例源码(超赞) 里面的例子 .sln 目录

    \-窗体技巧\QQ窗体\QQFrm.sln; \-窗体技巧\仿XP系统的任务栏菜单\仿XP系统的任务栏菜单.sln; \-窗体技巧\向窗体中拖放图片并显示\向窗体中拖放图片并显示.sln; \-窗体技 ...

  8. 一些SQL

    复制当前所有,ID自动增长.       insert into test(name,pass) select name,pass from test 删除当前重复      delete A fro ...

  9. 点 击 直 接加我QQ的功能

    <a target="_blank" href="tencent://message/?uin=2814920598&Site=&Menu=yes& ...

  10. ZeroMQ接口函数之 :zmq_send_const – 从一个socket上发送一个固定内存数据

    ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ——————————————————————————————————— ...