Spring框架主要使用依赖注入。实际上,很多牛叉的框架如Google的Guice都是使用依赖注入。

------------------------------------------------------依赖注入和IOC容器--------------------------------------------------------

1.依赖注入

有两个组件A和B,其中A中的一个方法使用到了B中的方法:

public classs A{
  public void MethodA{
    B b= ...//获取B的一个实例
    b.MethodB();
  }
}

1)要想使用B中的方法,必须首先获取B的一个实例,如果B是一个具体的类,则可以通过new获取到B的实例。但是如果B是一个接口,这个接口有多个实现,此时我们只能使用这个接口的一个实现,因此降低了A的重用性。

2)依赖注入接管对象的创建工作,并将该对象的引用注入到需要该对象的组件(也即对象)。上例,依赖注入框架会创建对象A和对象B,并将对象B注入到对象A中,这也对象A就可以使用对象B中方法。

3)框架进行依赖注入的前提是这些有依赖其他对象的对象中,定义了set方法或者构造函数。

set方法:框架会去调用这个set方法,将这个B对象注入到A对象。

public classs A{
  private B b;

  public void MethodA{
    b.MethodB();
  }   public void setB(B b){
    this.b=b;
  }
}

构造函数:框架会去首先创建B对象,然后创建A对象。

public classs A{
  private B b;   public A(B b){
    this.b=b;
  }   public void MethodA{
    b.MethodB();
  }
}

2.IOC容器

Spring通过一个IOC容器可以很完美的管理Java对象依赖关系。程序员无需知道Spring框架的存在,不需要引入任何Spring类型。

3.注解方式

Spring从2.5版本后即可以使用@Autowired注解支持field方式的依赖注入,但有一个问题,程序员必须依赖于Spring的org.springframework.beans.factory.annotation.Autowired,这样无法直接迁移到另一个IOC容器中。

使用Spring,程序几乎将所有重要对象的创建工作交给Spring,并管理配置如何注入依赖。Spring支持两种方式,分别是XML配置和注解。程序中需要一个ApplicationContext对象,代表一个Spring的IOC容器,这个接口有多个实现。一般对于Spring MVC应用来

说,不需要显示创建这个接口的对象,我们可以通过一个SpringServlet来处理ApplicationContext。 

------------------------------------------------------XML配置文件-------------------------------------------------------- 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
...
</beans>

如果需要更强的Spring配置能力,可以在schemalocation属性中添加相应的schema。配置文件可以是一份,也可以分解成多分,以便支持模块化配置。ApplicationContext的实现类支持读取多份配置文件。也可以通过创建一个主配置文件,将该文件导入到其他配置文件,以便复用。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="config1.xml"/>
<import resource="other.xml"/>
...
</beans>

  

  

 

SpringMVC学习指南-Spring框架的更多相关文章

  1. springmvc学习指南 之---第25篇 Spring Bean有三种配置方式

    writed by不要张艳涛, 从tomcat转到了springmvc 现在开始有点不知道该看什么书了,看完了springmvc 学习指南之后 又查了一些书,好多都是内容相近,在找书的过程之中,发现s ...

  2. (转)SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合

    http://blog.csdn.net/yerenyuan_pku/article/details/72231763 之前我整合了Spring和MyBatis这两个框架,不会的可以看我的文章MyBa ...

  3. spring学习12 -Spring 框架模块以及面试常见问题注解等

    以下为spring常见面试问题: 1.Spring 框架中都用到了哪些设计模式? Spring框架中使用到了大量的设计模式,下面列举了比较有代表性的: 代理模式—在AOP和remoting中被用的比较 ...

  4. SpringMVC学习指南-前言

    SpringMVC是Spring框架中用于Web应用快速开发的一个模块. SpringMVC基于Spring框架.Servlet和JSP. ------------------------------ ...

  5. 又一本springmvc学习指南 之---第22篇 springmvc 加载.xml文件的bean标签的过程

    writedby 张艳涛,今天看spring mvc 学习指南的第2章,特意提下这个作者是how tomcat works 俩个作者之一, 喜欢上一本书的风格,使用案例来讲述原理, 在做第一个案例的时 ...

  6. springmvc学习指南 之---第27篇 spring如何实现servlet3.0无web.xml 配置servlet对象的

    writedby 张艳涛 基于web.xml配置,有人说麻烦,tomcat给按照servlet3.0,实现了基于注解@WebServlet,有人说springmvc的springmvc.xml配置麻烦 ...

  7. springmvc学习指南 之---第24篇 国际化问题

    writedby 张艳涛,今天一天就搞了一个这个问题,主要是下路,遇到springmvc-config.web的配置和拦截器的使用问题, 看了几天的spring发现都没讲拦截器,之前看了两天sprin ...

  8. springmvc学习笔记一框架的理解

    SpringMVC现在在很多公司都很流行,所以这个框架对我们来说,是很重要的. 首先我们对比mvc来分析springmvc这个框架是怎么设计,以及它的工作的流程. 首先来看mvc: 1.  用户发起r ...

  9. 准备写一些读书笔记,最近在填坑 SQL学习指南 Spring in Action effective Java

    把一些读书的理解通过白板图的形式展示出来,加深自己的认识, 因为目前没有工程项目练手,暂时在学习中把这些知识深化认识一下

随机推荐

  1. CAD参数绘制块引用对象(网页版)

    主要用到函数说明: _DMxDrawX::DrawBlockReference 绘制块引用对象.详细说明如下: 参数 说明 DOUBLE dPosX 插入点的X坐标 DOUBLE dPosY 插入点的 ...

  2. freenas 系统可能存在的bug

    1.portal 中ip端口显示有问题. 2.创建extend/target映射之后重启iscsi服务有的时候不能启动. 3.后台/usr /etc 重启系统会自动还原.

  3. python selenium等待特定网页元素加载完毕

    selenium等待特定元素加载完毕 is_disappeared = WebDriverWait(driver, 8, 0.5, ignored_exceptions=TimeoutExceptio ...

  4. 扫黑除恶Team第四次团队作业

    二.博客撰写要求 文章开头给出团队序号,开发的软件名称,仓库地址. 给出完成本次冲刺需要做的事情(Sprint Backlog)及相应说明. 本次冲刺总结. 三.评分规则 注意:本次作业总分61分.发 ...

  5. react-native 框架升级 安卓第三方插件报错 Android resource linking failed

    亲自经历react-native从0.55升级到0.58的过程,有点坎坷,ios出现的问题还算不多,但是android这里,随着gradle和buildTool的使用升级,导致第三方插件出现各种问题, ...

  6. c++基础_特殊的数字

    #include <iostream> #include <math.h> using namespace std; int main(){ ;i<;i++){ ; )% ...

  7. PHP:Mysql 基础类

    文章来源:http://www.cnblogs.com/hello-tl/p/7592547.html <?php /** * __construct($Mysql_config) 构造函数 $ ...

  8. Python多线程豆瓣影评API接口爬虫

    爬虫库 使用简单的requests库,这是一个阻塞的库,速度比较慢. 解析使用XPATH表达式 总体采用类的形式 多线程 使用concurrent.future并发模块,建立线程池,把future对象 ...

  9. 转载,Django组件

    知识预览 一 Django的form组件 二 Django的model form组件 三 Django的缓存机制 四 Django的信号 五 Django的序列化 回到顶部 一 Django的form ...

  10. 多光源 MultipleLight

    使用2个Pass增加光照效果: 第一个Pass是基础光源,一般是第一个平行光:Tags{"LightMode" = "ForwardBase"} 第二个光源是增 ...