2016 - 2024

感恩一路有你

springbean实例化和初始化顺序 Spring中如何使用责任链模式?

浏览量:2169 时间:2023-04-02 09:19:51 作者:采采

Spring中如何使用责任链模式?

至于责任链模式,有两种形式。一种是通过外部调用来控制链条各节点的调用,从而在链条各节点之间进行切换;另一种是链的每个节点自由控制是否继续传递链的进度。这种典型的使用模式就是N:。

在上面的控制逻辑中,过滤器只能通过Spring的自动注入来获得,而这里,注入了一个,即如果我们需要参与责任链的过滤,只需要将其声明为Spring容器管理的bean即可。

这种责任链设计方法的优点是链的控制相对简单,只需要实现一个统一的接口,基本上可以满足大部分的逻辑控制,但是可以 对于一些需要动态调整链的需求,不做任何事情。比如执行到某个节点后,需要动态判断是执行下一个节点,还是执行一些分叉节点等等。这时候我们就需要把链节点的转移交给各个节点了。

2.节点控制模式

节点控制调用有三个主要的控制点:Handler、HandlerContext和Pipeline。Handler用于编写具体的业务代码;HandlerContext主要用于Handler包装并用于控制下一个节点的调用;管道主要用于控制任务查询、任务过滤、任务执行等全过程调用。这些流程的整体逻辑控制由Pipeline控制,每个流程包含一系列子流程,由HandlerContext和Handler进行排序。该责任链管控模式的整体逻辑如下图所示:

从图中可以看出,我们通过对象对整个流程进行抽象,主要分为查询任务、过滤任务、执行任务三个步骤。在每一步中,我们使用一系列的链式调用。需要注意的是,我们每次调用链的下一个节点都是通过特定的处理程序来完成的,也就是说,是否调用链的下一个节点是通过业务实现者来动态控制的。

关于这种模式的设计,首先需要强调的是界面设计,具体如下:

这里的接口主要是具体业务逻辑的抽象,需要说明以下几点:

在上图中,每个级别都有一个对应的方法。当需要具体的业务处理时,用户只需要声明一个bean来具体实现当前业务需要处理的级别的方法,而不用考虑其他逻辑。在每一级的方法中,第一个参数是一个类型,主要用于流程控制,比如当前级的调用链是否需要向下传递,其中链的传递主要通过方法进行;每一级方法都有一个默认的实现,默认的实现是向下传递链的调用;每个都有一个方法和一个方法,分别用于所有调用完成后的异常控制和清理。这里的异常控制主要是捕获当前进程中的异常,而方保证在所有步骤之后都会进行调用,不管是否抛出异常;对于的使用,我们希望达到的是,适用方只需要实现接口,用一个标注把它标记为bean,不用考虑整个组装和流程控制。这样既保留了每个弹簧提供的便利,又利用了图案的灵活性。在上面的流代码中,我们注意到每一层都有一个方法,用于传输与链相关的控制信息。在这里,让我们 让我们看看它的源代码:

在中,我们需要解释以下几点:

之前接口默认实现的方法都是委托给对应的方法进行调用,我们需要注意的是,在传递给方法的参数中,传入的对象都是通过方法获得的。也就是说,当我们在中调用方法时,我们正在调用当前处理程序的下一个handl。Er对应的是层级法,通过这种我们实现了链的向下传递。上一点我们说了,如果想让链往下传,只需要调用方法就可以了。也就是说,如果我们在某个地方,如果根据业务已经调用了当前级别,没有必要调用后续的,那么我们就不 不需要调用该方法;在中,我们还实现了方法,主要用于外部调用打开每一级的链;在每个方法中,我们使用try…catch来捕捉当前级别的调用所抛出的异常,然后调用方法来处理异常,这就是我们前面所说的。如果我们想处理当前的异常,我们只需要实现其中的方法,异常捕获过程就是在这里处理的。在声明的时候,我们需要注意到它被标注了和注释,说明我们的是Spring管理的bean,由于我们每个人实际上都是由一个维护的,所以这里必须声明为类型。这样我们也有了Spring相关bean的功能,可以根据业务需求做一些额外的处理。前面,我们讲解了的具体实施以及实施过程中应该注意的问题。让 让我们看看过程控制是如何实现的。以下是接口的定义:

本文主要定义了一个接口,它定义了一系列的层次调用,是每一层的入口方法。以下是此接口的实现类:

关于的实现,主要有以下几点需要说明:

注释和用于注释它。前一个注释用于将它声明为由Spring容器管理的bean,后一个注释用于描述它是多实例类型。显然,这是有状态的。这里需要说明的是,有状态主要是因为我们可能会根据业务情况动态调整一个链的节点状态,这里的和对象与具体业务相关,所以必须声明为类型;在上面的例子中,对象是在构造的时候传入的,对象是在循环的过程中生成的。比如链的调用完成后,需要通过外部请求获取一个对象,从而进行整个后续处理;这里我们已经意识到,并且知道这些bean是由Spring管理的,我们的下一个问题主要是如何组装整个链。这里的组装方法比较简单,主要需要解决两个问题:

对于后期写业务代码的人来说,只需要实现一个接口,不需要处理所有与链相关的逻辑,所以我们需要获取所有的bean实现了接口的;通过封装实现接口的bean,然后将其添加到。这里的第一个问题更容易处理,因为接口可以通过ApplicationContext获得和实现。第二个问题可以通过声明一个实现BeanPostProc

spring入门详解?

一. Spring概述

Spring是DI/IOC和AOP的轻量级容器框架。

??轻量级:简单易用,一般来说功能不强大(但spring功能强大)

??DI(依赖注入):动态地为一个对象提供它需要的其他对象,也可以是对象的一个属性字段。任务。(依赖注入分为xml注入和注释注入)

??IOC: spring控制一个对象的生命周期(创建、销毁)。

??AOP(面向方面编程):解决重复代码。提取相同的逻辑,即将业务逻辑从应用服务中分离出来。然后它以拦截的作用于方法的不同位置。

第二,Spring入门

1.介绍图书馆

引导包装时请注意。现在使用Spring,我们需要完成最小的guide包,也就是我们会导入任何我们需要的jar包,使用其他函数,然后添加相应的jar包。这个包对理解框架很有帮助:

2.导入Spring配置文件

1.在类路径的根目录中创建新的applicationContext.xml配置文件。可以自定义文件名,但通常使用applicationCont:xsi##34

xsie CHO 4-@ . com schema location #

#34gt

tltbean id#34...#34类#34...#34gt

tlt!-此bean的协作者和配置在此处- gt

tlt/beangt

lt/beansgt

一个

2

10

一个

2

10

3.编写逻辑代码

公共类MyBean {

tpublic void hello(){

你好,春天...#34)

t}

}

一个

2

一个

2

4.把这个类交给Spring来管理,就是在Spring容器中注册。

在配置文件中将这个Java类交给Spring进行管理。在applicationContext.xml中配置

ltbeans

lt bean id # 34 my bean # 34 class # _ 01 _ # 34 gtlt/bean gt

lt/beansgt

一个

2

一个

2

5.5的实例化。弹簧容器

有两种Spring容器对象:BeanFactory和ApplicationCont: Bean factory,顾名思义,它是一个制造Bean的工厂。

T *和Bean factory来创建对象,并且必须获取配置文件中的数据。

T *因为:我们的第一步是读取配置文件,并将其获取到BeanFactory Factory T。

t */

t

T//第一步:读取资源文件。

tResource资源新建class path resource(# 34 application context . XML # 34)

T//第二步:获取核心对象BeanFactory。

tBeanFactory工厂新的XmlBeanFactory(资源)

}

一个

2

10

11

12

13

14

15

16

一个

2

10

11

12

13

14

15

16

应用程序上下文(推荐)

@测试

public void t: Bean factory,顾名思义,它是一个制造Bean的工厂。

T *和Bean factory来创建对象,并且必须获取配置文件中的数据。

T *因为:我们的第一步是读取配置文件,并将其获取到BeanFactory Factory T。

t */

t

T//在加载项目的类路径下实例化配置文件。

tString conf # 34 application context . XML # 34

tApplicationContext工厂新的classpathmlaplicationcontext(conf)

}

一个

2

10

11

12

13

14

15

一个

2

10

11

12

13

14

15

6.如何获得对象

方法一:直接通过id获取对应的Bean对象。

//通过xml中配置的id获取对象。

MyBean bean (MyBean)(#34myBean#34)

(豆子)

一个

2

一个

2

方法二:通过对象的id和类对象获取Bean对象(推荐)。

//通过对象的id和类获取Bean对象。

MyBean bean (#34myBean#34,)

(豆子)

一个

2

一个

2

第三,Spring依赖注入

1.xml注入

顾名思义:它是用xml配置的,但是这个方法必须有对应的setter方法。所有这种注入方法也被称为属性注入或setter方法注入。

公共类MyBean{

其他豆类

tpublic void hello(){

ttotherBean.hello()

t}

public void setOtherBean(other bean other bean){

这个。其他豆类

}

}

一个

2

10

一个

2

10

公共类OtherBean{

tpublic void hello(){

(#34以太网你好# 34)

t}

}

一个

2

一个

2

//xml配置:

lt bean id # 34 other bean # 34 class # # 34 gtlt/bean gt

lt bean id # 34 my bean # 34 class # # 34gt

lt property name # 34 other bean # 34 ref # 34 other bean # 34 gtlt/property gt

lt/beangt

一个

2

一个

2

2.注释注入

顾名思义:注入是通过评论实现的。这样,可以在setter方法或字段上编写注释。如果它们写在字段上,就不需要setter方法。

2.1选项1:使用@Autowired

@ Autowired 对春天的评论

公共类MyBean{

其他豆类

tpublic void hello(){

ttotherBean.hello()

t}

}

公共类OtherBean{

tpublic void hello(){

(# 34另一个他第34页)

t}

}

一个

2

10

11

12

13

14

一个

2

10

11

12

13

14

//xml配置:

lt bean id # 34 other bean # 34 class # # 34 gtlt/bean gt

lt bean id # 34 my bean # 34 class # # 34 gtlt/bean gt

一个

2

一个

2

2.2选项2:使用@Resource

公共类MyBean{

@资源

其他豆类

tpublic void hello(){

ttotherBean.hello()

t}

}

公共类OtherBean{

tpublic void hello(){

(#34以太网你好# 34)

t}

}

一个

2

10

11

12

13

14

一个

2

10

11

12

13

14

和@资源。

@Autowired:先按默认类型再按名称匹配。

@Resource:默认按名称匹配,然后按类型匹配。

方法 对象 Spring 业务 逻辑

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。