Spring@Component

时间:2020-02-23 14:35:51  来源:igfitidea点击:

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上下文,并从中获取MathComponentbean。

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注释。
结果仍然是相同的。