Java EE框架整合开发入门到实战-spring

Spring

一、Spring特点

1、IOC(Inverse of Control)控制反转

作用

解耦合
Spring框架出现后, 对象的实例不再由调用者来创建,而是由Spring容器来创建。

IOC容器基于BeanFactory和ApplicationContext两个接口

BeanFactory

是一个管理Bean的工厂, 主要负责初始化各种Bean。
主要负责初始化各种Bean。BeanFactory接口有多个实现类,其中比较常用的是 org.springframework.beans.factory.xml.XmlBeanFactory, 该类会根据XML配置文件中的定义来装配 Bean(有关Bean的知识将在本书第3章讲解)。
在这里插入图片描述

ApplicationContext(BeanFactory的子接口)

ApplicationContext是BeanFactory的子接口,也称为应用上下文,由org.springframework.context.ApplicationContext接口定义。 ApplicationContext接口除了包含BeanFactory的所有功能以外,还添加了对国际化、资源访问、 事件传播等内容的支持。

1、通过ClassPathXmlApplicationContext创建

ClassPathXmlApplicationContext将从类路径目录(src根目录〉中寻找指定的XML配置文件
在这里插入图片描述

2、通过 FileSystemXmlApplicationContext创建

FileSystemXmlApplicationContext将从指定文件的绝对路径中寻找XML配置文件,找到井装载完成 ApplicationContext的实例化工作。
在这里插入图片描述

3、通过Web服务器实例化ApplicationContext容器

在 Web 服务器实例化ApplicationContext 容器时, 一般使用基于 org.springframework. web.context.ContextLoaderListener 的实现方式(需要将 spring-web-5.0.2.RELEASE.jar 复制 到 WEB-INF/lib目录中),此方法只需在 web.xml 中添加如下代码

在这里插入图片描述

2、DI(依赖注入,通过反射实现)

在Spring中实现IoC容器的方法是依赖注入,依赖注入的作用是在使用Spring框架创建对象时动态地将其所依赖的对象(例如属性值〉注入Bean组件中。
Spring 框架的依赖注入通常有两种实现方式:

扫描二维码关注公众号,回复: 11016742 查看本文章
  • 一种是使用构造方法注入
  • 另一种是使用属性的 setter 方法注入。

Spring 框架可 以采用 Java 的反射机制,通过构造方法完成依赖注入。

使用构造方法注入

#### 在配置文件中,constructor-arg元素用于定义类构造方法的参数,index用于定义参数的位置,ref指定某个实例的引用。如果参数是常数值,ref由value代替

使用属性的setter方法注入

使用setter方法注入是Spring框架中最主流的注入方式,它利用JavaBean规范所定义的setter方法来完成注入,灵活且可读性高。对于setter方法注入,Spring框架也是使用Java的反射机制实现的
在这里插入图片描述

二、Spring框架的配置文件

没有规定,因为在BeanFactory读取的时候,需要传文件名称

Spring 可以看作一个大型工厂, 用于生产和管理 Spring 容器中的 Bean。 如果要使用这个工厂生产和管理 Bean, 需要开发者将 Bean 配置在 Spring 的配置文件中。 Spring 框架支持 XML 和 Properties 两种格式 的配置文件,在实际开发中常用 XML 格式的配置文件。
在这里插入图片描述
在这里插入图片描述

三、Bean的实例化对象

如果我们想要使用一个对象,就要实现实例化该对象,同样在Spring框架中,如果想要使用Spring容器中的Bean,也需要实例化Bean,Spring 框架实例化 Bean 有 3 种方式,即构造方法实例化、 静态工厂实例化和实例工厂实例化(其中,最常用的方法是构造方法实例化 )。

1、构造方法实例化

在 Spring 框架中,Spring容器可以调用 Bean 对应类中的无参数构造方法来实例化 Bean,这种方式称为构造方法实例化。

在这里插入图片描述在这里插入图片描述

2、静态工厂实例化

在使用静态工厂实例化 Bean 时要求开发者在工厂类中创建一个静态方法来创建Bean的实例。在配置 Bean时, class属性指定静态工厂类,同时还需要使用 factory-method属性指定工厂类中的静态方法 。 下面通过 ch3 应用测试静态工厂实例化。
在这里插入图片描述在这里插入图片描述

3、实例工厂实例化

在使用实例工厂实例化 Bean 时要求开发者在工厂类中创建一个实例方法来创建 Bean 的实例。在配置 Bean 时需要使用 factory-bean 属性指定配置的实例工厂,同时还需要使用 factory-method 属性指定实例工厂中的实例方法。
在这里插入图片描述

三、Bean的作用域

在Spring中不仅可以完成Bean 的实例化,还可以为 Bean指定作用域。在 Spring5.0 中为 Bean 的实例定义了如表 3.2所示的作用域。
在这里插入图片描述singleton和 prototype是最常用的两种,后面4种作用域仅在 Web Spring应用程序上下文中使用

1、singleton作用域

当将 bean的 scope设置为 singleton时, SpringIoC容器仅生成和管理一个Bean实例。 在使用id或name获取Bean实例时,IoC容器将返回共享的Bean实例。
由于 singleton是 scope 的默认方式 ,因此有两种方式将 bean 的 scope 设置为 singleton。 配置文件示例代码如下:

在这里插入图片描述

2、prototype作用域

在这里插入图片描述

四、Bean的生命周期

一个对象的生命周期包括创建(实例化与初始化)、使用以及销毁等阶段,在 Spring 中,Bean对象周期也遵循这一过程,但是Spring提供了许多对外接口,允许开发者对3 个过程(实例化、初始化、销毁)的前后做一些操作。在 Spring Bean中,实例化是为 Bean 对象开辟空间,初始化则是对属性的初始化。
一个对象的生命周期包括创建(实例化与初始化)、使用以及销毁等阶段,在 Spring 中, Bean 对象周期也遵循这一过程,但是 Spring 提供了许多对外接口,允许开发者对 3 个过程(实例化、初始化、销毁)的前后做一些操作。在 Spring Bean 中,实例化是为 Bean 对象开辟空间,初始化则是对属性的初始化。

在这里插入图片描述

五、Bean的装配方式(获取对象的方式?)

Bean的装配可以理解为将Bean依赖注入到Spring容器中,Bean的装配方式即Bean依赖注入的方式。Spring容器支持基于XML的装配方式、基于注解的装配以及自动装配等多种装配方式,其中最受喜爱的是基于注解的装配.

1、基于xml的装配方式(也就是构造函数装配和使用setter方法装配)

基于 XML 配置的装配方式已经有很久的历史了,曾经是主要的装配方式。通过 2.3 节的学习,我们知道 Spring 提供了两种基于 XML 配置的装配方式, 即使用构造方法注入 和使用属性的 setter方法注入。
在使用构造方法注入方式装配 Bean 时, Bean 的实现类需要提供带参数的构造方法,并在配置文件中使用< bean>元素的子元素来定义构造方法的参数:在使用属性的 setter 方法注入方式装配 Bean 时, Bean 的实现类需要提供一个默认无参数的构造方法,并为需要注入的属性提供对应的setter方法,另外还需要使用元素的子元素为每个属性注入值。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

使用注解的装配方式

如果应用中存在大量的注解需要去配置,会导致XML配置文件过于庞大,不方便以后的升级与维护,因此更多时候会推荐使用注解的方式去装配

1、Component(主件,要在配置文件开启主件扫描)

该注解是一个泛化的概念,仅仅表示一个组件对象( Bean),可以作用在任何层次上。下面通过一个实例讲解@ Component。
听视频的时候的理解是这个相当于
如果后面设置名称,就相当于id=?

注意:
配置注解之后,必须要去扫描注解
在这里插入图片描述

2、Repository

该注解用于将数据访问层(DAO)的类标识为Bean, 即注解数据访问层Bean,其功能与@Component相同。

3、Service

该注解用于标注一个业务逻辑组件类(Service层〉,其功能与@Component相同 。

4、Controller

该注解用于标注一个控制器组件类(SpringMVC 的 Controller),其功能与@Component 相同。

5、Autowired

该注解可以对类成员变量、方法及构造方法进行标注,完成自动装配的工作。通过使用@Autowired来消除 setter和 getter方法。 默认按照 Bean 的类型进行装配。

6、Resource

该注解与@Autowired的功能一样,区别在于该注解默认是按照名称来装配注入的,只有当找不到与名称匹配的 Bean 时才会按照、类型来装配注入;而@Autowired 默认按照 Bean 的类型进行装配,

如果想按照名称来装配注入,则需要和@Qualifier注解一起使用 。

@Resource注解有两个属性一-name和type。 name属性指定Bean实例名称,即按照、 名称来装配注入 ;type 属性指定Bean类型,即按照 Bean 的类型进行装配。

7、Qualifier

该注解与@Autowired注解配合使用。当@Autowired 注解需要按照名称来装配注入时需要和该注解一起使用, Bean的实例名称由@Qualifier注解的参数指定 。

8、Spring 的通知是什么?有哪几种类型?

通知是个在方法执行前或执行后要做的动作,实际上是程序执行时要通过 SpringAOP 框架触发的代码段。 Spring 切面可以应用五种类型的通知:

  • 1)before:前置通知,在一个方法执行前被调用。
  • 2)after: 在方法执行之后调用的通知,无论方法执行是否成功。
  • 3)after-returning: 仅当方法成功完成后执行的通知。
  • 4)after-throwing: 在方法抛出异常退出时执行的通知。
  • 5)around: 在方法执行之前和之后调用的通知。

总结

在上面几个注解中,虽然@Repository、@Service和 @Controller等注解的功能与@Component注解相同,但为了使类的标注更加清晰(层次化),在实际开发中推荐使用 @Repository标注数据访问层(DAO层〉、使用@Service标注业务逻辑层(Service层〉、使用@Controller标注控制器层(控制层)。

发布了105 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_38367817/article/details/104661426