当前位置: 首页 > 网络应用技术

在-Depth Spring组件注册中学习

时间:2023-03-07 23:39:07 网络应用技术

  与Spring接触的学生必须听到IOC。在传统的Java编程中,当需要某个对象时,我们都会显式地创建一个对象实例(新)。您在使用春季后不需要这样做因为春天会帮助我们自动注入我们需要使用某些对象的对象,并且我们不需要自己创建它。该模型通常称为控制逆转,即IOC(控制倒置)。弹簧会得到我们需要的对象吗?实际上,Spring为我们提供了一个管理所有对象的IOO容器。组件注册是要告诉需要将哪些类别移交给IOC容器管理。

  以下是组件注册的一些细节。

  在春季的早期版本中,我们都通过XML在IOC容器中注册组件。以下代码绝对不是不熟悉的:

  Spring 4建议我们使用Java配置来注册组件。

  为了证明,我们构建了一个简单的春季启动应用程序,然后介绍Lombok依赖项(编辑器还需要安装Lombok Plug -in),然后创建一个用户类:

  然后创建配置类,通过注释注册用户类:

  通过注释,我们在IOC容器中注册一个名称(BEAN名称默默地标识了方法名称,并且还可以指定组件名称为)。

  注册组件后,我们将从IOC容器中测试此组件。在Spring Boot输入类中写下以下代码:

  因为我们通过注释注册组件,所以我们需要使用它来获取相应的IOC容器并输入参数作为配置类。

  启动项目,查看控制台输出:

  说明该组件已成功注册。

  我们将组件的名称更改为,然后查看在IOC容器中是否调用了用户类型组件:

  当使用XML配置组件进行扫描时,我们都对其进行了配置:

  指定了扫描路径。所有路径下标记的类别将包含在IOC容器中。

  现在,我们可以使用注释来扫描组件并在脱离XML配置后注册。

  在使用扫描之前,我们首先创建一个控制器,服务,DAO并标记相应的注释。

  然后修改配置类:

  在配置类中,我们配置了扫描路径并注释用户组件的注册。相反,注释被添加到用户类:

  值得注意的是,我们不能将弹簧启动的入口类纳入扫描范围,否则项目将启动错误。

  接下来,我们可以查看这些组件是否包含在注释的IOC容器中:

  可以看出,该组件已被扫描,名称被定义为草图。

  在这里,还扫描和注册了配置WebConfig。如果您检查源代码,您将找到原因:

  注释允许我们指定扫描策略,即指定的扫描策略,这些策略是扫描且未扫描的,请检查源代码以查找这两个属性:

  其中之一也是注释:

  接下来,我们用来消除一些组件扫描:

  上面我们指定了消除扫描的两个规则:

  启动项目,观察控制台:

  可以看出,它是成功的。

  除上述两个常用规则外,我们还可以使用其他规则来查看源代码:

  可以看出,我们还可以通过表达式,正则表达式和自定义规则(下面的详细介绍)来指定扫描策略。

  相反的作用,该组件被指定为扫描:

  上述配置仅包含在IOC容器中,并且需要使用它来关闭弹簧的默认扫描策略以使我们的配置能够生效(弹簧启动入口注释中包含的默认扫描策略)。

  在Java 8之前,我们可以用来配置多个以实现多个扫描规则:

  在Java 8中,添加了注释。可以重复使用此注释修改的注释。查看源代码将发现它已由注释标记:

  因此,除了使用更多扫描规则外,我们还可以通过多次使用来指定多个不同的扫描规则。

  自定义扫描策略要求我们实现界面并创建接口的实现:

  该界面包含方法,其中两个处于参数,含义如下:

  当方法返回true时,匹配成功,false表示匹配失败。

  上面扫描的类别名称在上面指定,并且匹配是成功的。结合扫描类名称的含义,该类未包含在IOC容器中。

  我们在中国使用这种自定义过滤策略:

  因为包括类别名称,因此不包括在IOC容器中。

  默认情况下,Spring的IOC容器中的每个组件都是一种情况,也就是说,无论注入多少次,这些对象都是相同的,让我们看以下示例。

  首先删除用户对象中的注释,然后在配置类中配置用户bean:

  然后多次从IOC容器中获取此组件,以查看是否相同:

  在春季,我们可以使用注释来更改组件的范围:

  懒惰负载是单身模式。如前所述,IOC容器中的组件默认为单个情况。启动容器后,调用该方法创建对象,然后将其集成到IOC容器中。

  在用户bean注册的地方添加一个句子以观察:

  测试:

  将用户bean更改为懒惰加载:

  可以看出,创建容器时,没有将用户bean组件添加到容器中。

  因此,懒负荷的功能是,在单打模式下,IOC容器不会调用该方法创建对象并在IOC容器创建时立即注册。仅当组件用于首次效率时

  有测试:

  结果证实了我们的观点。

  我们可以指定组件使用注释的条件,即满足特定条件,将组件包含在IOC容器中。

  在使用此注释之前,我们需要创建一个类来实现接口:

  该界面包含一种方法,包括两个注册:

  只需改善此实施类:

  然后将此条件添加到用户bean注册的地方:

  在Windows环境中,将成功注册用户的组件。如果是另一个操作系统,则该组件将不会注册到IOC容器中。

  您可以根据不同的环境变量注册不同的组件。让我们学习它的用法。

  到目前为止,我们可以使用扫描并实现组件注册。此外,我们可以使用组件快速将组件添加到IOC容器中。

  创建一个新类:

  然后在配置类中导入此组件:

  查看IOC容器中所有组件的名称:

  可以看出,通过我们可以快速将组件添加到IOC容器中,ID是一个完整的类名称。

  通过我们实施了组件的引入,如果我们需要一次导入更多组件,我们可以使用它。

  稍微添加三个类别,稍微和谐,代码。

  查看源代码:

  它是一个接口,其中包含一种返回类的完整类名称数组的方法(即IOC容器中组件组件的完整类名称数组),其中包含一种参数类型。

  我们创建一个新的实施类:

  以上方法返回整个类名的三个新类,然后我们使用配置类的注释将这三个组件快速导入到IOC容器中:

  检查容器中的这三个组件是否:

  这些组件已成功引入。

  除了以上两种将组件导入IOC容器的方法外,我们还可以用来手动将组件导入IOC容器。

  查看其源代码:

  它是一个接口,其中包含一个包含两个输入参数的方法:

  在这里,我们需要在IOC容器中注册BEAN。该方法包含两个参数。第一个是需要注册的名称(ID)。第二个参数是bean的定义信息。这是一个接口。我们可以使用其实施类完成:

  为了使用演示,我们首先添加一个新类,名称为,代码略有。

  然后添加一个新的实施类:

  在上述实现类中,我们首先使用该方法来确定IOC容器是否包含名称的组件。如果没有,请手动注册。

  定义后,我们还将其在配置类中使用:

  检查容器中是否已经有此组件:

  组件已成功注册。

  Spring还提供了一个接口,我们可以通过实现接口来注册组件。该界面包含两个抽象方法和一个默认方法:

  为了使用演示,我们添加了一个带有小代码的新类。

  然后创建了实现类:

  返回需要注册的组件对象,然后返回到需要注册的组件类型以指示组件是否是单个情况。如果是多case,则每次获得组件时都调用该方法。

  定义后,我们在配置类中注册此类:

  进入测试场地:

  可以看出,尽管我们获得了基于ID的组件,但它们获得的实际对象是方法中返回的对象。

  如果我们想自己做到,我们可以做到这一点:

  为什么可以将相应的工厂类带有前缀?您检查的源代码将找到原因: