Spring @Service 注解与示例
Spring 是最流行的Java EE 框架之一。它是一个开源轻量级框架,允许Java EE 7 开发人员构建简单、可靠且可扩展的企业应用程序。该框架主要侧重于提供各种方法来帮助您管理业务对象。与Java数据库连接 (JDBC)、JavaServer Pages (JSP) 和Java Servlet 等经典Java框架和应用程序编程接口 (API) 相比,它使 Web 应用程序的开发更加容易。该框架使用各种新技术,如面向方面编程 (AOP)、普通Java对象 (POJO) 和依赖注入 (DI) 来开发企业应用程序。现在谈论 Spring Annotation
Spring Annotations are a form of metadata that provides data about a program. Annotations are used to provide supplemental information about a program. It does not have a direct effect on the operation of the code they annotate. It does not change the action of the compiled program.
Spring Framework 中有许多可用的注解。下面列出了一些 Spring 框架注解,在这里我们将讨论最重要的注解之一,即@ServiceAnnotation
- @必需的
- @自动连线
- @配置
- @ComponentScan
- @豆
- @零件
- @控制器
- @服务
- @Repository 等
@Service 注解
在应用程序中,业务逻辑位于服务层中,因此我们使用@Service 注解来指示一个类属于该层。它也是@Component Annotation的一个特化,就像@Repository Annotation一样。 @Service 注解最重要的一点是它只能应用于类。它用于将类标记为服务提供者。因此,整体 @Service 注释与提供某些业务功能的类一起使用。当使用基于注释的配置和类路径扫描时,Spring 上下文将自动检测这些类。
程序
- 创建一个简单的 Spring Boot 项目
- 在 pom.xml 文件中添加 spring-context 依赖项。
- 创建一个包并将包命名为“服务”。
- 测试弹簧存储库
第 1 步:创建一个简单的 Spring Boot 项目
参考这篇文章在 Eclipse IDE 中创建和设置 Spring Boot 项目并创建一个简单的 Spring Boot 项目。
第 2 步:在 pom.xml 文件中添加 spring-context 依赖项。转到项目中的 pom.xml 文件并添加以下 spring-context 依赖项。
XML
org.springframework
spring-context
5.3.13
Java
// Java Program to Illustrate MyServiceClass
// Importing package module to code module
package com.example.demo.service;
// Importing required classes
import org.springframework.stereotype.Service;
// Annotation
@Service
// Class
public class MyServiceClass {
// Method
// To compute factorial
public int factorial(int n)
{
// Base case
if (n == 0)
return 1;
return n * factorial(n - 1);
}
}
Java
// Java Program to Illustrate DemoApplication
// Importing package module to code fragment
package com.example.demo;
// Importing required classes
import com.example.demo.service.MyServiceClass;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
// Annotation
@SpringBootApplication
// Main class
public class DemoApplication {
// MAin driver method
public static void main(String[] args)
{
AnnotationConfigApplicationContext context
= new AnnotationConfigApplicationContext();
context.scan("com.example.demo");
context.refresh();
MyServiceClass myServiceClass
= context.getBean(MyServiceClass.class);
// Testing the factorial method
int factorialOf5 = myServiceClass.factorial(5);
System.out.println("Factorial of 5 is: "
+ factorialOf5);
// Closing the spring context
// using close() method
context.close();
}
}
第 3 步:在您的项目中创建一个包并将包命名为“服务”。在服务中,包创建一个类并将其命名为MyServiceClass 。这将是我们最终的项目结构。
例子
Java
// Java Program to Illustrate MyServiceClass
// Importing package module to code module
package com.example.demo.service;
// Importing required classes
import org.springframework.stereotype.Service;
// Annotation
@Service
// Class
public class MyServiceClass {
// Method
// To compute factorial
public int factorial(int n)
{
// Base case
if (n == 0)
return 1;
return n * factorial(n - 1);
}
}
请注意,在这段代码中,它是一个简单的Java类,提供了计算数字的阶乘的功能。所以我们可以称它为服务提供者。我们使用 @Service 注释对其进行了注释,以便 spring-context 可以自动检测它,并且我们可以从上下文中获取它的实例。
第 4 步: Spring 存储库测试
所以现在我们的 Spring Repository 已经准备好了,让我们测试一下。转到演示应用程序。 Java文件并参考下面的代码。
例子
Java
// Java Program to Illustrate DemoApplication
// Importing package module to code fragment
package com.example.demo;
// Importing required classes
import com.example.demo.service.MyServiceClass;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
// Annotation
@SpringBootApplication
// Main class
public class DemoApplication {
// MAin driver method
public static void main(String[] args)
{
AnnotationConfigApplicationContext context
= new AnnotationConfigApplicationContext();
context.scan("com.example.demo");
context.refresh();
MyServiceClass myServiceClass
= context.getBean(MyServiceClass.class);
// Testing the factorial method
int factorialOf5 = myServiceClass.factorial(5);
System.out.println("Factorial of 5 is: "
+ factorialOf5);
// Closing the spring context
// using close() method
context.close();
}
}
输出:
Note: If you are not using the @Service annotation then you are going to encounter the following exception
Exception in thread “main” org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘com.example.demo.service.MyServiceClass’ available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:351)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:342)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1172)
at com.example.demo.DemoApplication.main(DemoApplication.java:17)