Sping Mvc 学习笔记(一)

     对于Spring 的历史以及概述这里就不淡了,相信大家百度一发就会看到很多,同时Spring的优势相信大家也都有所了解,这里也不帮着它再进行打广告,还是直接上干货!

IoC容器概述

1.IoC概念所包含的设计思想

2.Java语言反射机制

3.BeanFactory、ApplicationContext以及WebApplicationContext基础接口

1.1 IoC概述

     IoC(控制反转:Inverse of Control)是Spring容器的内核 ,AOP、声明式事物等功能在此基础上开花结果。它主要包含了两个内容:(1)控制(2)反转

     究竟什么是所谓的控制反转?通过书中的术语说就是某一接口具体实现类的选择控制权从调用类中移除,转交给第三方决定,而这里就要提到由泰斗人物Martin Fowler提出的DI(依赖注入:Dependency Injection)了,用它替代了IoC,这样更容易被理解。

1.2 IoC的类型

     从注入的方法上看,主要可以划分为三种类型:构造函数注入、属性注入和接口注入。Spring 支持构造函数注入和属性注入。以下举例说明以下三种注入方法的区别。
     构造函数注入

public class MoAttack{
    private GeLi geli;
    //注入革离的具体扮演者
    public MoAttack(GeLi geli){
        this.geli = geli;
    }
    public void cityGateAsk(){
        geli.responseAsk("墨者革离!");
    }
}
public class Director{
    public void direct(){
        //指定角色的扮演者
        GeLi geli = new LiuDeHua();
        //注入具体扮演者到剧本
        MoAttack moAttack = new MoAttack(geli);
        moAttack.cityGateAsk();
    }
}

     这样我们就完成了一个简单的构造函数注入,同时将革离的扮演者刘德华也一起“注入”到墨攻的剧本中了。

     属性注入

     通过以上的构造函数的注入,我们可能会发现,并不是在任何的时候都需要革离的出现,这时我们可以考虑一下属性注入。属性注入我们可以通过Setter方法完成调用类所需的依赖注入。代码如下:

public class MoAttack{
    private GeLi geli;
    //属性注入方法
    public void setGeli(GeLi geli){
        this.geli = geli;
    }
    public void cityGateAsk(){
        geli.responseAsk("墨者革离!");
    }
}
public class Director{
    public void direct(){
        //指定角色的扮演者
        GeLi geli = new LiuDeHua();
        MoAttack moAttack = new MoAttack();

        //调用属性Setter方法注入
        moAttack.setGeli(geli);
        moAttack.cityGateAsk();
    }
}

     我们在进行实例化MoAttack的时候,并未指定任何的扮演者,只有在需要革离出场的时候,才调用其setGeli()方法注入扮演者,这样针对不同的剧本可以注入所需的不同角色了~

     接口注入

     将调用类所有依赖注入的方法抽取到一个接口中,调用类通过实现该接口提供的相应的注入方法,这样我们就需要额外的去声明一个借口,增加了类的数目,而且它的效果和属性注入并无本质区别,我们不提倡这种做法,这里就不进行详细介绍了。

1.3 通过容器完成依赖关系的注入

     前面介绍了这么多,相信大家已经对IoC有了一定的理解,这样我们就可以上正菜了~

     我们可以将Spring理解为一种容器,它通过配置文件或注解描述类和类之间的依赖关系,自动的完成类的初始化和依赖注入的工作。下面是对以上的实例进行配置的配置文件片段:

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
<!--实现类实例化-->
<bean id="geli" class="LiuDeHua"/>
<bean id="moAttack" class="com.ioc.MoAttack"
    p:geli-ref="geli"/><!--通过geli-ref建立依赖关系-->
</beans>    

     这样我们可以通过new XmlBeanFactory(“beans.xml”)等方式即可启动容器。在容器启东市,Spring根据配置文件的描述信息,自动实例化Bean并完成依赖关系的装配,从容器中即可返回准备就绪的Bean实例,后续可直接使用之。当然,对于这样神奇的事情,身为博主的我,也被惊呆了。它归功于Java语言本身的类反射功能.So,接下来我们将会介绍Java语言的反射知识!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值