按照WWW方式来学习,那么显然我们首先要提问,spring是什么,但是这个我觉得并不关键,你想知道自己百度即可。我们直接来谈谈,为什么是spring。
根据Spring著名的书籍《Spring实战第四版》,是这么说的。

  • 基于POJO的轻量级和最小侵入性编程
  • 通过依赖注入和面向接口实现松耦合
  • 通过切面和惯例进行声明式编程
  • 通过切面和模板减少样板式代码
    其中POJO就是普通Java beans的意思
    那么我们也许不能立刻全部理解,但我们可以首先说一说什么是耦合

耦合

在软件工程中,耦合指的就是就是对象之间的依赖性。对象之间的耦合越高,维护成本越高。因此对象的设计应使类和构件之间的耦合最小。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合
换句话说,如果耦合度过高,程序将受到很大的制约。

public class AccountServiceImpl implements IAccountService {
private IAccountDao accountDao = new AccountDaoImpl();
}
上面的代码表示:
业务层调用持久层,并且此时业务层在依赖持久层的接口和实现类。如果此时没有持久层实现类,编译
将不能通过。这种编译期依赖关系,应该在我们开发中杜绝。我们需要优化代码解决。

如何去降低这种耦合呢,那么我们就需要用到控制反转的知识了。
那么我们把视线拉回到,使用new语句新建对象,发生了什么:
image.png
那么显而易见,首先的类加载检查,就过不去。
我们选择将创建新对象的权力外包给框架,这就是所谓控制反转(Inversion of Control,IOC)。
那么承接这种权力的工厂就是Java BeanFactory和它的子类ApplicationContext。
我们常用的是Application也就是应用上下文接口。
它有如下三种实现方式:
1、ClassPathXmlApplicationContext:
它是从类的根路径下加载配置文件 推荐使用这种
2、FileSystemXmlApplicationContext:
它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。
3、AnnotationConfigApplicationContext:
当我们使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解。
当系统创建ApplicationContext容器时,默认会预初始化所有singleton Bean (prototype类型Bean当需要的时候才会创建)。
那么究竟有哪几种Bean呢?

  • singleton :默认值,单例的。
  • prototype :多例的。
  • request :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中。
  • session :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中。
  • global session :WEB 项目中,应用在 Portlet 环境.如果没有 Portlet 环境,那么globalSession 相当于 session。

那么有哪几种不同的创建Bean的方法呢?

1、调用无参数构造函数创建Bean。
2、spring 管理静态工厂-使用静态工厂的方法创建对象。也就是声明一个静态工厂,使用工厂里的方法来创建Bean。
3、spring 管理实例工厂-使用实例工厂的方法创建对象。与上一个的区别在于,这种方式需要把工厂先创建出来。

接下来是最关键的依赖注入部分,我们该如何使用工厂的车间为自己加工货物呢,这就是依赖注入的原理了。
我们可以使用Spring对Bean中的类进行各种属性的传入。有构造函数注入的方法,有set的方法,有p命名空间等方法。