spring常用注解总结

1、核心注解

1.1 @SpringBootApplication

这是Spring Boot 框架中的一个注解,用于标识一个类是 Spring Boot 应用程序的入口点。通过使用 @SpringBootApplication 注解,可以实现自动配置、组件扫描和开启 Spring Boot 的特性。这个注解整合了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 注解的功能,具体如下:

@Configuration:标记一个类作为bean定义的源。
@EnableAutoConfiguration:启用Spring Boot的自动配置机制。
@ComponentScan:启用@Component注解的扫描。

在一个 Spring Boot 应用程序中,通常会在一个类的 main 方法上添加 @SpringBootApplication 注解,以标识它作为应用程序的入口点。这样做可以让 Spring Boot 自动配置并启动应用程序。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

1.2 @Component

在Java中,@Component是Spring框架中的注解之一。它用于将一个类标记为一个可被Spring容器管理的组件。

具体来说,通过在类上添加@Component注解,Spring容器会自动扫描并将该类实例化为一个Bean对象,可以在应用程序中进行依赖注入和其他的Spring特性使用。

例如,假设我们有一个名为UserDao的类,并且希望将其作为一个可被Spring容器管理的组件:

@Component
public class UserDao {
   // 类的定义
}

然后,在其他使用了Spring容器的地方,我们可以通过@Autowired注解将UserDao自动注入到需要使用它的地方:

@Component
public class UserService {

   @Autowired
   private UserDao userDao;

   // 其他方法
}

这样,当Spring容器启动时,会自动扫描到UserDao类,并将其实例化为一个Bean对象。在UserService类中,我们使用@Autowired注解将UserDao注入到userService中,从而实现了依赖注入。

需要注意的是,要使用@Component注解,需要确保在Spring配置文件中启用了组件扫描,例如在XML配置文件中添加以下内容:

<context:component-scan base-package="com.example.package" />

这样,Spring容器就会自动扫描指定包下的类,并将使用@Component注解的类实例化为Bean对象。

总结一下,@Component是Spring框架中的注解之一,用于将一个类标记为一个可被Spring容器管理的组件。它可以与@Autowired等注解一起使用,实现依赖注入和其他Spring特性的使用。

1.3 @Controller

@Controller是Spring框架中用于标识一个类为控制器的注解。在Spring MVC中,使用@Controller注解标识的类可以接收前端的请求,并根据请求调用相应的方法进行处理,然后返回视图或数据给前端。

下面是一个简单的使用@Controller注解的示例:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {

    @GetMapping("/hello")
    @ResponseBody
    public String hello() {
        return "Hello, World!";
    }
}

在上面的示例中,HelloController类被标记为@Controller,并且定义了一个处理GET请求的hello()方法,该方法返回一个字符串"Hello, World!"。同时,@GetMapping注解表示该方法处理GET请求,@ResponseBody注解表示方法的返回值直接作为响应体返回给客户端。

需要注意的是,@Controller注解通常与@RequestMapping、@GetMapping等注解一起使用,用于定义请求映射和处理方法,实现前后端的交互。

1.4 @RestController

@RestController 是 Spring 框架中用来定义 RESTful 服务的注解。在一个类上添加 @RestController 注解后,该类中的方法返回的数据会直接以 JSON 或 XML 格式写入 HTTP 响应体中,而不是像传统的 @Controller 注解那样返回一个视图。

这样做的好处是可以更方便地开发 RESTful 风格的接口,通过 HTTP 请求直接获取到数据,而无需经过模板引擎等视图解析过程。

以下是一个简单的示例:

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}

在这个例子中,当访问 /hello 路径时,会直接返回字符串 “Hello, World!”,而不会经过视图解析器。

1.5 @RequestMapping/@GetMapping/@PostMapping/@PutMapping/@DeleteMapping

这些都是在Java Spring框架中用于定义RESTful API的注解,具体作用如下:

@RequestMapping:是一个用来处理请求地址映射的注解,可用于类或方法上。可以指定请求的URL地址、HTTP请求方式等信息。

@GetMapping:是@RequestMapping(method = RequestMethod.GET)的缩写,表示方法仅处理GET请求。常用于查询数据的操作。

@PostMapping:是@RequestMapping(method = RequestMethod.POST)的缩写,表示方法处理POST请求。常用于提交数据的操作。

@PutMapping:是@RequestMapping(method = RequestMethod.PUT)的缩写,表示方法处理PUT请求。通常用于更新资源。

@DeleteMapping:是@RequestMapping(method = RequestMethod.DELETE)的缩写,表示方法处理DELETE请求。通常用于删除资源。

通过在方法上使用这些注解,可以方便地定义处理不同HTTP请求类型的RESTful API接口。

用法代码举例:

@RestController
@RequestMapping("/example")
public class ExampleController {
    
    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
    
 	@PostMapping("/create")
    public String create() {
        return "Object created!";
    }

    @PutMapping("/update")
    public String update() {
        return "Object updated!";
    }

    @DeleteMapping("/delete")
    public String delete() {
        return "Object deleted!";
    }
}

1.6 @Autowired

@Autowired 是 Spring 框架中用来自动装配 Bean 的注解之一。通过 @Autowired 注解,Spring 容器会自动识别标记了 @Autowired 的字段、构造函数和方法参数,并尝试将匹配的 Bean 注入到这些地方。

示例代码如下:

// 在类中使用 @Autowired 注解进行自动装配
public class UserService {
    @Autowired
    private UserRepository userRepository;

    // 构造函数自动装配
    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    // 方法参数自动装配
    @Autowired
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

需要注意的是,使用 @Autowired 进行自动装配时,需要确保容器中有且仅有一个类型匹配的 Bean,否则会抛出异常。如果存在多个匹配的 Bean,可以结合 @Qualifier 注解或者在配置文件中明确指定要装配的 Bean。

2、配置注解

2.1 @Configuration

在 Spring 框架中,@Configuration 注解用于定义配置类,配置类中包含了一些 Spring Bean 的定义和配置。通常与 @Bean 注解一起使用,@Bean 注解用于将方法的返回对象注册为一个 Spring Bean。

下面是一个简单的示例,演示了如何使用 @Configuration 注解和 @Bean 注解:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {

    @Bean
    public MyService myService() {
        return new MyService();
    }

    @Bean
    public MyRepository myRepository() {
        return new MyRepository();
    }
}

在上面的示例中,AppConfig 类使用 @Configuration 注解标记为配置类,其中分别定义了两个方法 myService() 和 myRepository(),并使用 @Bean 注解将它们注册为 Spring Bean。

在其他类中,可以通过注入 AppConfig 类来获取这些 Bean 对象,例如:

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MyApp {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

        MyService myService = context.getBean(MyService.class);
        MyRepository myRepository = context.getBean(MyRepository.class);

        // 使用 myService 和 myRepository 对象进行操作
    }
}

通过 @Configuration 注解和 @Bean 注解,我们可以方便地管理和配置 Spring Bean,实现依赖注入和控制反转。同时,这种方式也更加灵活,可以避免使用 XML 配置文件。

3、事务注解

3.1 @Transactional

@Transactional 是一个注解,通常用于标记方法或类,用来指示该方法或类应该被事务管理器管理。当一个方法或类被标记为 @Transactional 时,该方法或类中的操作将被视为一个事务单元,事务管理器将负责控制事务的提交、回滚等操作。

在 Spring 框架中特别常见 @Transactional 注解的使用,通过在方法或类上加上 @Transactional 注解,可以简化事务管理的操作,并确保数据操作的一致性和完整性。在使用 @Transactional 注解时,需要配置好事务管理器和数据源等相关信息,以便注解能够正确地工作。

用法:

1、在方法级别使用 @Transactional 注解:

import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    @Transactional
    public void updateUser(User user) {
        // 执行更新操作
        userRepository.update(user);
    }
}

2、在类级别使用 @Transactional 注解:

import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public void updateUser(User user) {
        // 执行更新操作
        userRepository.update(user);
    }
}

需要注意的是,@Transactional 注解默认只对未检查异常进行回滚,如果需要对特定异常进行回滚,可以使用 @Transactional 的 rollbackFor 属性来指定需要回滚的异常类型。

4、测试注解

4.1 @SpringBootTest

@SpringBootTest 是 Spring Boot 提供的一个注解,用于在集成测试中加载整个 Spring 应用程序上下文。通过使用 @SpringBootTest 注解,我们可以方便地进行整个应用程序的集成测试,包括自动装配所有的 bean、加载所有配置文件等。

在使用 @SpringBootTest 注解时,我们可以通过 classes、properties、webEnvironment 等属性来进一步定制测试的环境。比如,可以通过设置 webEnvironment 属性为 RANDOM_PORT 来启动一个随机端口的 web 服务器,从而进行 HTTP 请求的集成测试。

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.assertNotNull;

@SpringBootTest
public class MyServiceTest {

    @Autowired
    private MyService myService;

    @Test
    public void testMyService() {
        assertNotNull(myService);
        // 在这里编写针对 MyService 的测试逻辑
    }
}

在这个例子中,@SpringBootTest 注解用于测试类 MyServiceTest 上。在该类中,使用 @Autowired 注解将 MyService 自动注入到测试类中,然后通过测试方法来验证是否成功注入,并进行相应的测试逻辑。

5、其他注解

5.1 @Value

@Value注解通常用于将属性值注入到Spring管理的Bean中。通过@Value注解,我们可以从配置文件、环境变量或其他位置中读取数值,并将其注入到Java类的字段或方法参数中。这样可以实现配置的外部化,方便我们在不同环境下管理应用程序的配置。

例如,在Spring框架中,我们可以这样使用@Value注解:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class MyComponent {
    @Value("${my.property}")
    private String myProperty;

    // 其他代码
}

在上面的示例中,@Value(“${my.property}”)表示将配置文件中名为my.property的属性值注入到myProperty字段中。

需要注意的是,为了使用@Value注解,我们需要在Spring配置文件中启用属性占位符的支持,例如在XML配置文件中添加 context:property-placeholder 标签,或者在Java配置类中使用 @PropertySource 注解来指定属性文件的位置。

除了基本类型之外,@Value注解还可以用于注入复杂类型的值,比如数组、集合、甚至是其他Bean对象。这使得我们可以很灵活地管理应用程序的配置信息。

你可能感兴趣的:(Spring,spring,java,后端)