Spring 1.初识 Spring

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配置文件中加载上下文定义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值