Spring1

来源:互联网 发布:网络伤感催泪情歌 编辑:程序博客网 时间:2024/06/01 12:57
Spring体系介绍
Spring的功能和特点大致上被组织成如下七个部分:
   核心机制
  Context容器
    Web支持
  MVC框架
   DAO支持
   ORM支持
   面向切面编程支持
核心机制以BeanFactory为基础,管理bean与bean之间的依赖。ApplicationContext容器是BeanFactory功能加强的子接口。Web支持提供Web应用开发的支持。MVC框架则是针对Web应用的MVC思想实现;DAO支持包括一致的异常处理和编程方式;ORM支持则用于与流行的ORM框架的整合;面向切面编程提供与AOP联盟兼容的编程实现
Spring的基本设计思想
Spring实现了两种基本设计模式:
工厂模式
 单态模式

public class SingletonTest

{

    //该类的一个普通属性。

int value ;

//使用静态属性类保存该类的一个实例。

    private static SingletonTest instance;

    //构造器私有化,避免该类被多次实例。

private SingletonTest()

    {

                   System.out.println(“正在执行构造器…”);

    }

    //提供静态方法来返回该类的实例。

public static SingletonTest getInstance()

    {

                   //实例化类实例前,先检查该类的实例是否存在

           if (instance == null)

                   {

                            //如果不存在,则新建一个实例。

                            instance = new SingletonTest();

                   }

                   //返回该类的成员变量:该类的实例。

                   return instance;

    }

         //以下提供对普通属性valuesettergetter方法

    public int getValue()

    {

           return value;

    }

    public void setValue(int values)

    {

           this.value = value;

    }

工厂模式
//Person接口定义
public interface Person
{       
         /**
          * @param name 对name打招呼
          * @return 打招呼的字符串
          */
    public String sayHello(String name);
         /**
          * @param name 对name告别
          * @return 告别的字符串
          */
    public String sayGoodBye(String name);
}
该接口定义Person的规范,该接口必须拥有两个方法:能打招呼、能告别。规范要求实现该接口的类必须具有这两个方法:
//American类实现Person接口
public class American implements Person
{
         /**
          * @param name 对name打招呼
          * @return 打招呼的字符串
          */
    public String sayHello(String name)
    {
           return name + ",Hello";
    }
         /**
          * @param name 对name告别
          * @return 告别的字符串
          */
    public String sayGoodBye(String name)
    {
           return name + ",Good Bye";
    }
}
下面是实现Person接口的另一个实现类:Chinese
public class Chinese implements Person
{
         /**
          * @param name 对name打招呼
          * @return 打招呼的字符串
          */
    public String sayHello(String name)
    {
           return name + ",您好";
    }
         /**
          * @param name 对name告别
          * @return 告别的字符串
          */
    public String sayGoodBye(String name)
    {
           return name + ",下次再见";
    }
}
然后看Person工厂的代码:
public class PersonFactory
{
/**
          * 获得Person实例的实例工厂方法
          * @ param ethnic 调用该实例工厂方法传入的参数
          * @ return返回Person实例
          */
public Person getPerson(String ethnic)
    {
                   //根据参数返回Person接口的实例。
           if (ethnic.equalsIgnoreCase("chin"))
           {
                return new Chinese();
           }
            else
           {
                return new American();
           }
    }
}
理解依赖注入
依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。
第一种情况下,Java实例的调用者创建被调用的Java实例,必然要求被调用的Java类出现在调用者的代码里。无法实现二者之间的松耦合。
第二种情况下,调用者无须关心被调用者具体实现过程,只需要找到符合某种标准(接口)的实例,即可使用。此时调用的代码面向接口编程,可以让调用者和被调用者解耦,这也是工厂模式大量使用的原因。但调用者需要自己定位工厂,调用者与特定工厂耦合在一起。
第三种情况下,调用者无须自己定位工厂,程序运行到需要被调用者时,系统自动提供被调用者实例。事实上,调用者和被调用者都处于Spring的管理下,二者之间的依赖关系由Spring提供。
所谓依赖注入,是指程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部的注入。Spring的依赖注入对调用者和被调用者几乎没有任何要求,完全支持对POJO之间依赖关系的管理。依赖注入通常有两种:
     设值注入。
    构造注入。