spring中常用注解
Spring 框架提供了许多注解,这些注解用于简化开发、配置和管理 Spring 应用程序。理解这些注解可以帮助开发者更高效地使用 Spring。
1. @Component
@Component 注解用于标记一个类为 Spring 管理的 Bean。它是一个通用的注解,适用于各种类型的组件。
实际场景
假设我们有一个 UserService 类,我们希望 Spring 容器管理这个类的实例。
代码示例
import org.springframework.stereotype.Component;
@Component
public class UserService {
public void createUser(String name) {
System.out.println("Creating user: " + name);
}
}
2. @Service
@Service 注解用于标记一个类为服务层组件。它是一个特殊的 @Component,用于服务层。
实际场景
假设我们有一个 UserService 类,它负责处理用户相关的业务逻辑。
代码示例
import org.springframework.stereotype.Service;
@Service
public class UserService {
public void createUser(String name) {
System.out.println("Creating user: " + name);
}
}
3. @Controller
@Controller 注解用于标记一个类为控制器层组件。它是一个特殊的 @Component,用于控制器层。
实际场景
假设我们有一个 UserController 类,它负责处理用户相关的 HTTP 请求。
代码示例
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class UserController {
@GetMapping("/users")
public String listUsers() {
return "users";
}
}
4. @Repository
@Repository 注解用于标记一个类为持久层组件。它是一个特殊的 @Component,用于数据访问层。
实际场景
假设我们有一个 UserRepository 类,它负责与数据库交互。
代码示例
import org.springframework.stereotype.Repository;
@Repository
public class UserRepository {
public User findUserById(String id) {
// 模拟数据库查询
return new User(id, "Alice");
}
}
5. @RestController
@RestController 注解用于标记一个类为 RESTful 控制器。它是一个特殊的 @Controller,用于 RESTful API。
实际场景
假设我们有一个 UserController 类,它负责处理用户相关的 RESTful 请求。
代码示例
import org.springframework.web.bind.annotation.*;
import org.springframework.stereotype.Controller;
@RestController
public class UserController {
@GetMapping("/users/{id}")
public User getUser(@PathVariable String id) {
return new User(id, "Alice");
}
}
6. @Autowired
@Autowired 注解用于自动注入依赖。Spring 容器会自动查找并注入匹配的 Bean。
实际场景
假设我们有一个 UserService 类,它依赖于 UserRepository。
代码示例
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User getUserById(String id) {
return userRepository.findUserById(id);
}
}
7. @Qualifier
@Qualifier 注解用于指定注入的具体 Bean 的名称,当存在多个相同类型的 Bean 时,可以使用 @Qualifier 来指定注入哪一个。
实际场景
假设我们有两个 UserRepository 的实现类,我们希望注入特定的一个。
代码示例
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
@Qualifier("mongoUserRepository")
private UserRepository userRepository;
public User getUserById(String id) {
return userRepository.findUserById(id);
}
}
8. @Configuration
@Configuration 注解用于标记一个类为配置类,它等同于 Spring 的 XML 配置文件。
实际场景
假设我们有一个配置类,用于定义一些 Bean。
代码示例
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserService();
}
@Bean
public UserRepository userRepository() {
return new UserRepository();
}
}
9. @Bean
@Bean 注解用于在配置类中定义一个 Bean。
实际场景
假设我们在配置类中定义了一个 UserService 的 Bean。
代码示例
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserService();
}
}
10. @Primary
@Primary 注解用于指定优先注入的 Bean,当存在多个相同类型的 Bean 时,@Primary 指定的 Bean 会被优先注入。
实际场景
假设我们有两个 UserRepository 的实现类,我们希望优先注入 MongoUserRepository。
代码示例
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
@Configuration
public class AppConfig {
@Bean
@Primary
public UserRepository mongoUserRepository() {
return new MongoUserRepository();
}
@Bean
public UserRepository jdbcUserRepository() {
return new JdbcUserRepository();
}
}
11. @Scope
@Scope 注解用于指定 Bean 的作用域,如 singleton、prototype、session 等。
实际场景
假设我们希望 UserService 是一个原型 Bean,每次请求都会创建一个新的实例。
代码示例
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
@Service
@Scope("prototype")
public class UserService {
public void createUser(String name) {
System.out.println("Creating user: " + name);
}
}
12. @Transactional
@Transactional 注解用于声明事务,它指定了事务的传播行为、隔离级别等。
实际场景
假设我们希望 UserService 的 createUser 方法运行在事务上下文中。
代码示例
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class UserService {
@Transactional
public void createUser(String name) {
System.out.println("Creating user: " + name);
}
}
13. @Async
@Async 注解用于标记一个方法为异步方法,它允许方法在另一个线程中执行。
实际场景
假设我们希望 UserService 的 sendEmail 方法异步执行。
代码示例
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Async
public void sendEmail(String email) {
System.out.println("Sending email to: " + email);
}
}
14. @EventListener
@EventListener 注解用于监听 Spring 事件,它允许方法在特定事件发生时被调用。
实际场景
假设我们希望在用户创建时发送一个事件,并监听这个事件。
代码示例
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
@Component
public class UserCreatedEventListener {
@EventListener
public void handleUserCreatedEvent(UserCreatedEvent event) {
System.out.println("User created: " + event.getUserName());
}
}
总结
Spring 提供了许多注解,这些注解用于简化开发、配置和管理 Spring 应用程序。理解这些注解可以帮助开发者更高效地使用 Spring。

2892

被折叠的 条评论
为什么被折叠?



