
Spring是目前非常流行的Java Web开发框架,用于解决企业应用的复杂性问题。
- Spring框架是一个开放源代码的J2EE应用程序框架,是针对bean的生命周期进行管理的轻量级容器
- 控制反转——Spring通过一种称作控制反转(IoC)的技术促进了低耦合。
- 面向切面——允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发。
- 容器
- 框架——Spring可以将简单的组件配置、组合成为复杂的应用。
文章目录org.springframework spring-webmvc5.3.13
- 1、为什么要使用Spring框架?
- 2、什么是IoC?
- 3、什么是DI?
- 4、使用IoC/DI的好处?
- 5、IoC/DI的实现
- ①、Spring核心容器
- ②、IoC/DI实现方式
之前的业务中,用户的需求会影响原本的代码,需要根据用户的需求去修改源代码。
如果程序代码量很大,修改一次代码的代价会非常大。
在传统的面向对象编程方式里,获取对象的方式一般都是new一个新对象,进行调用
但是在spring框架中,利用了IoC的方式对象的生命周期由Spring框架提供的IoC容器来管理,所有的对象都存储在容器里,控制权由应用程序交给了IoC容器。
当我们需要使用的时候,直接去容器中拿取,更加的方便快速
IoC译为控制反转。
将创建对象的过程由主动变为被动,即把创建对象交给IoC容器处理,控制权反转过来,就是控制反转。
IoC理论上是借助了第三方实现具有依赖关系对象之间的解耦,把各个对象类封装后,通过IoC容器来关联这些对象类。这样对象与对象直接就没有什么直接的关系,而是通过IoC容器进行联系。
DI译为依赖注入。
所谓依赖注入,就是由IoC容器在运行期间动态地将某种依赖关系注入对象之中。
事实上,依赖注入(DI)和控制反转(IoC)是对同一个事情的不同描述。
依赖注入是从程序的角度描述,即应用程序依赖容器创建并注入它需要的外部资源;
而控制反转是从容器的角度描述,即容器控制程序,由容器反向地向应用程序注入应用程序所需要的外部资源。
这里的外部资源可以是外部实例对象,也可以是外部文件对象。
- 可维护性比较好,便于单元测试、调试程序和诊断故障。代码的每一个class都可以单独调试,彼此之间互不影响,只有保证自身的功能无误就可以,这就是组件之间的低耦合或者无耦合带来的好处!
- 在团队开发中,只需要关注自己的业务实现就可以。因为自己的任务跟别人的任务没有任何关系,自己的任务可以单独测试,不用依赖别人的组件。
- 可复用性好。可以将具有普遍性的常用组件独立出来,反复应用到项目中的其他部分,或者是其他项目,当然这也是面向对象的基本特征。IoC更好的贯彻了这个原则,提高了模块的可复用性。
符合接口标准的实现都可以插接到支持此标准的模块中! - 生成对象的方式转为外置方式,就是把对象生成放在配置文件中进行定义。这样,当我们更换一个实现子类的将会变得更加简单,只有修改配置文件即可。完全符合热插拔的特性!
Spring框架主要功能是通过容器来实现。Spring框架提供了两种核心容器分别是BeanFactory和ApplicationContext。IoC/DI通常有setter注入和构造方法注入两种实现方式。
①、Spring核心容器Spring框架的两个最基本和最重要的包是org.springframework.beans.factory(主要接口:BeanFactory)
和org.springframework.context(主要接口:ApplicationFactory)
Spring IoC框架主要组件有Beans、配置文件applicationContext.xml、BeanFactory接口及其相关类、ApplicationContext接口及其相关类
(1)、Beans是指项目中提供业务功能的Bean,即容器要管理的Bean。Beans就是一个常见的JavaBean、Java类
(2)、在Spring中对Bean的管理是在配置文件中进行的。在Spring容器内编辑配置文件管理Bean又称Bean的装配,实际上装配就是告诉容器需要哪些Bean,以及容器是如何使用IoC将它们配合起来的。
Bean的配置文件是一个xml文件,可以命名为applicationContext.xml或其他,一般习惯applicationContext.xml
配置文件包含Bean的id、类、属性、及其值。包含一个元素和数个 子元素。 Spring IoC框架可根据Bean的id从Bean配置文件中取得该Bean的类,并生成该类的一个实例对象, 继而从配置文件中获得该对象的属性和值。 常见的配置文件格式如下:
(3)、BeanFactory采用工厂设计模式,即Bean容器模式,负责读取Bean的配置文件,管理对象的生成、加载,维护Bean对象与Bean对象之间的依赖关系,负责Bean的生命周期。
对于简单的程序来说,使用BeanFactroy已经足够管理Bean了,在对象的管理上可以获得许多便利性。
org.springframework.beans.factory.BeanFactory是一个顶级接口,包含管理Bean的各种方法。Spring框架也提供了一些实现该接口的类
org.springframework.beans.factory.xml.XmlBeanFactory是BeanFactory常用的实现类,根据配置文件中的定义装载Bean。要创建XmlBeanFactory,需要传递一个FileInputStream对象,该对象把XML文件提供给工厂。
BeanFactroy factory = new XmlBeanFactory(new FileInptStream("applicationContext.xml"));
BeanFactory的常用方法如下:
- getBean(String name):可根据Bean的id生成该Bean的对象,一般要强制转型,才可以使用
- getBean(String name,Class requiredType):可根据Bean的id和相应类生成该Bean的对象。
(4)、ApplicationContext接口提供高级功能的容器,基本功能和BeanFactory很相似,但它还有一下功能:
- 提供访问资源文件更方便的方法
- 支持国际化消息
- 提供文字消息解析的方法
- 可以发布事件,对事件感兴趣的Bean可以接受到这些事件
ApplicationContext接口的常用实现类有以下三个:
- FileSystemXmlApplicationContext:从文件系统中的xml文件加载上下文中定义的信息
- ClassPathXmlApplicationContext:从类路径中的xml文件加载上下文中定义的信息,把上下文中定义的文件当成类路径资源
- XmlWebApplicationContext:从web系统中的xml文件加载上下文中定义的信息
其中,FileSystemXmlApplicationContext和ClassPathXmlApplicationContext的使用如下:
ApplicationContext context = new FileSystemXmlApplicationContext("d:/applicationContext.xml");
//重点使用
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
第一种使用文件系统的方式来查询配置文件,此时配置文件位于D盘下。
第二种使用类路径查询配置文件,此时配置文件很久位于项目的src目录下,一般IDEA创建的Maven项目应该在resources目录下。
区别:
FileSystemXmlApplicationContext只能在指定的路径下查询配置文件,ClassPathXmlApplicationContext可以在整个类路径中查询配置文件。
实现方式主要有两种方式:一种是setter()方法注入,另一种是构造方法注入。
- 属性setter()方法注入:IoC容器使用setter()方法注入被依赖的实例。通过调用无参构造器或无参静态工厂方法实例化Bean后,调用该Bean的setter()方法,即可实现基于setter()方法的依赖注入。该方法简单直观,而且容易理解,所以Spring的设置注入被大量使用
- 构造方法注入:IoC容器使用构造方法注入被依赖的实例。基于构造方法的依赖注入通过调用带参数的构造方法来实现,每个参数代表一个依赖。
构造方法注入的方式:
首先需要有一个没有set方法的类
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + ''' +
", age=" + age +
'}';
}
}
1、下标赋值
2、类型创建
3、参数名创建(常用)
总结:在配置文件加载的时候,容器中管理的对象已经初始化了,如果在容器中创建了,那么在运行的时候容器中的对象会被全部取出!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)