Spring@Component
Spring Component注释用于将一个类表示为Component。
这意味着当使用基于注释的配置和类路径扫描时,Spring框架将自动检测这些类以进行依赖项注入。
Spring 组件
用外行术语来说,组件负责某些操作。
当将一个类标记为Component时,Spring框架提供了其他三个特定的注释。
服务:表示该类提供了一些服务。
我们的实用程序类可以标记为服务类。Repository
:此批注表明该类处理CRUD操作,通常用于处理数据库表的DAO实现。控制器:通常与Web应用程序或者REST Web服务一起使用,以指定该类为前端控制器,并负责处理用户请求并返回适当的响应。
请注意,所有这四个注释都在org.springframework.stereotype包中,并且是spring-context jar的一部分。
在大多数情况下,我们的组件类将属于其三个专用注释之一,因此您可能不会经常使用@ Component
注释。
Spring 组件示例
让我们创建一个非常简单的Spring maven应用程序,以展示Spring Component注解的用法以及Spring如何通过基于注解的配置和类路径扫描自动检测它。
创建一个maven项目并添加以下spring核心依赖项。
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.6.RELEASE</version> </dependency>
这就是获取Spring框架核心功能所需要的。
让我们创建一个简单的组件类,并用@Component批注对其进行标记。
package com.theitroad.spring; import org.springframework.stereotype.Component; @Component public class MathComponent { public int add(int x, int y) { return x + y; } }
现在我们可以创建一个基于注释的spring上下文,并从中获取MathComponent
bean。
package com.theitroad.spring; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class SpringMainClass { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); context.scan("com.theitroad.spring"); context.refresh(); MathComponent ms = context.getBean(MathComponent.class); int result = ms.add(1, 2); System.out.println("Addition of 1 and 2 = " + result); context.close(); } }
只需将上述类作为普通的Java应用程序运行,您将在控制台中获得以下输出。
Jun 05, 2016 12:49:26 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh INFO: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@ff5b51f: startup date [Tue Jun 05 12:49:26 IST 2016]; root of context hierarchy Addition of 1 and 2 = 3 Jun 05, 2016 12:49:26 PM org.springframework.context.support.AbstractApplicationContext doClose INFO: Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@ff5b51f: startup date [Tue Jun 05 12:49:26 IST 2016]; root of context hierarchy
您是否意识到Spring的强大功能,我们无需做任何事情就可以将组件注入Spring环境。
下图显示了我们的Spring Component示例项目的目录结构。
我们还可以指定组件名称,然后使用相同的名称从spring上下文中获取它。
@Component("mc") public class MathComponent { }
MathComponent ms = (MathComponent) context.getBean("mc");
尽管我在MathComponent中使用了@Component注释,但实际上它是一个服务类,我们应该使用@Service注释。
结果仍然是相同的。