【Spring笔记】1.初识Spring

来源:互联网 发布:二元期权作弊软件 编辑:程序博客网 时间:2024/06/17 02:29

1. Spring简介

Spring是一个开源框架,最早由Rod Johnson创建,是针对JavaBean生命周期进行管理的轻量级容器,而其最根本的使命:简化Java开发。Spring采取了以下4种关键策略: - 基于POJO(Plain Old Java Object)的轻量级和最小侵入性编程; - 通过依赖注入和面向接口实现松耦合; - 基于切面和惯例进行声明式编程; - 通过切面和模板减少样板式代码。

2. Spring特性简介

2.1 IoC(Inversion of Control)

IoC(控制反转),或者说DI(依赖注入),Spring的核心之一。在Spring中,对象无需自己查找或创建与其所关联的其他对象;而是通过容器把需要相互协作的对象引用赋予各个对象。这种创建应用对象之间协作关系的行为通常称为装配(wiring),这也是DI(依赖注入)的本质。

写一段代码:

public class Driver{    private Truck truck;    public Driver(){        //与Truck紧耦合        this.truck = new Truck();    }    public void drive(){        System.out.println("Driver is driving"+truck.getBrand());    }}

上面这个代码,Driver只能驾驶Truck ,极大的限制了Driver的能力,如果我想让这个Driver开其他种类的车,那么这个Driver就爱莫能助了。这个代码的缺点直观可见,而下面这个代码就更加灵活。

public class Driver{    private Car car;    //Car被注入进来    public Driver(Car car){           this.car = car;    }    public void drive(){        System.out.println("Driver is driving"+car.getBrand());    }}

Car是个抽象类,Driver类没有和特定的Car实现产生耦合,这是依赖倒置原则。而Driver类并没有自行创建Car,而是在构造的时候把Car作为构造器参数传入。这是依赖注入的方式之一,即构造器注入(constructor Injection)。

2.2 AOP(Aspect-Oriented Programming)

DI能够让相互协作的软件组件保持松散耦合,而面向切面编程(AOP)把遍布应用各处的功能分离出来形成可重用的组件。

再写一段代码:

public class Driver{    private Car car;    public Driver(Car car){        this.car = car;    }    public void beforeDrive(){        System.out.println("Before drive...");    }    public void drive(){        System.out.println("Driver is driving"+car.getBrand());    }    public void afterDrive(){        System.out.println("After drive...");    }}

这个代码很明显有问题,before()和after()方法直接写死在代码中,比如我们要计算每个方法的执行时间,那岂不是每个方法我们都要针对它写一个before和after;写个JDBC程序,每个方法都要开头连接数据库和结尾关闭数据库连接。而AOP可以把这些公共的代码提出来,让这个类、这个方法专心干好自己的本职工作,这也是符合设计模式的单一职责模式。

3. Spring容器(container)简介

容器是Spring框架的核心。Spring容器使用DI管理构造应用的组件,它会创建相互协作的组件之间的关联。在基于Spring的应用中,你的应用对象生存于Spring容器中。Spring容器负责创建对象,装配它们,配置它们并管理它们的整个生命周期。

Spring容器自带多个容器实现,可以归为两种不同的类型:
- bean工厂(由org.springframework.beans.factory.BeanFactory接口定义)是最简单的容器,提供基本的DI支持
- 应用上下文(由org.springframework.context.ApplicationContext接口定义)基于BeanFactory创建,并提供应用框架级别的服务。

应用上下文比bean工厂更常用。

常用的应用上下文:

  • AnnotationConfigApplicationContext:从一个或多个Java注解加载Spring应用上下文。
  • AnnotationConfigWebApplicationContext:从一个或多个Java注解加载Spring Web应用上下文。
  • ClassPathXMLApplicationContext:从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的定义文件作为类资源。
  • FileSystemXmlApplicationContext:从文件系统下的一个或多个XML配置文件中加载上下文定义。
  • XmlWebApplicationContext:从Web应用下一个或多个XML配置文件中加载上下文定义。
原创粉丝点击