spring 框架中常用注解汇总,及对应作用介绍、使用示例demo演示
以下是 Spring 框架中常用注解的汇总及对应作用介绍、使用示例演示:
一、核心功能注解
-
@Component
- 作用:标记类为 Spring 组件,会被自动扫描到 IoC 容器[1][4]。适用于通用组件类。
- 示例:
@Component public class MyComponent { ... }
-
@Service
- 作用:标识该类是一个业务逻辑层的组件[1][3][7]。是
@Component
的特化形式,提供语义上的区分。 - 示例:
@Service public class UserService implements MyService { ... }
- 作用:标识该类是一个业务逻辑层的组件[1][3][7]。是
-
@Repository
- 作用:标识该类是一个数据访问层的组件[1][3][7]。是
@Component
的特化形式,常用于数据访问对象(DAO)。 - 示例:
@Repository public class UserDao { ... }
- 作用:标识该类是一个数据访问层的组件[1][3][7]。是
-
@Controller
- 作用:标识该类是一个控制器层(Controller)组件[1][3][7]。是
@Component
的特化形式,用于处理 HTTP 请求。 - 示例:
@Controller public class HomeController { ... }
- 作用:标识该类是一个控制器层(Controller)组件[1][3][7]。是
-
@Configuration
- 作用:用于标注一个类作为配置类,表明这个类可以包含定义 Spring Bean 的方法[1][3][4]。
- 示例:
@Configuration public class AppConfig {@Beanpublic MyService myService() {return new MyServiceImpl();} }
-
@ComponentScan
- 作用:启用组件扫描,让 Spring 自动发现并注册带有
@Component
、@Service
、@Repository
或@Controller
等注解的类为 Spring Bean[1][2][8]。 - 示例:
@Configuration @ComponentScan(basePackages = "com.example") public class AppConfig {}
- 作用:启用组件扫描,让 Spring 自动发现并注册带有
-
@Bean
- 作用:用于在配置类的方法上,告诉 Spring 该方法将返回一个对象,该对象应被注册为 Spring 上下文中的 Bean[1][3][4]。
- 示例:
@Configuration public class AppConfig {@Beanpublic DataSource dataSource() {return new HikariDataSource();} }
二、依赖注入与装配
-
@Autowired
- 作用:用于自动装配依赖,可以在构造函数、字段或 setter 方法上使用[1][3][4]。
- 示例:
@Service public class MyServiceImpl implements MyService {private final MyRepository repository;@Autowiredpublic MyServiceImpl(MyRepository repository) {this.repository = repository;} }
-
@Qualifier
- 作用:当有多个相同类型的 Bean 时,配合
@Autowired
使用,指定具体要注入的 Bean[1][4][7]。 - 示例:
@Autowired @Qualifier("specificBeanName") private MyComponent myComponent;
- 作用:当有多个相同类型的 Bean 时,配合
-
@Primary
- 作用:在存在多个候选 Bean 时,优先选择标记了
@Primary
的 Bean 进行注入[1][7]。 - 示例:
@Bean @Primary public MyService primaryService() {return new PrimaryServiceImpl(); }
- 作用:在存在多个候选 Bean 时,优先选择标记了
三、生命周期回调方法
-
@PostConstruct
- 作用:用于标注初始化方法,在依赖注入完成后执行[1][7]。
- 示例:
@Service public class MyService {@PostConstructpublic void init() {// 初始化逻辑} }
-
@PreDestroy
- 作用:标注销毁方法,在 Bean 销毁之前执行[1][7]。
- 示例:
@Service public class MyService {@PreDestroypublic void cleanup() {// 清理逻辑} }
四、属性值注入
-
@Value
- 作用:用于注入外部配置的值,如从 properties 文件中读取的配置项[1][4][7]。
- 示例:
@Component public class MyComponent {@Value("${my.property}")private String propertyValue; }
-
@PropertySource
- 作用:用来加载 properties 文件到 Spring 环境中[1][8]。
- 示例:
@Configuration @PropertySource("classpath:application.properties") public class AppConfig {}
五、Web开发相关注解
-
@RequestMapping
- 作用:用于映射请求路径和处理方法[3][5][7]。
- 示例:
@Controller @RequestMapping("/user") public class UserController {@GetMapping("/{id}")public String viewUser(@PathVariable("id") int id, Model model) {User user = userService.getUserById(id);model.addAttribute("user", user);return "user";} }
-
@RestController
- 作用:组合了
@Controller
和@ResponseBody
,直接返回 JSON[4][5][7]。 - 示例:
@RestController @RequestMapping("/api/users") public class UserController {@GetMapping("/{id}")public User getUser(@PathVariable Long id) {return userService.findUser(id);} }
- 作用:组合了
-
@RequestParam
- 作用:用于绑定请求参数到方法的参数上[5][7]。
- 示例:
@GetMapping("/welcome") public String welcome(@RequestParam String name) {return "Welcome, " + name; }
-
@PathVariable
- 作用:用于从 URI 路径中提取变量并绑定到方法参数上[5][7]。
- 示例:
@GetMapping("/user/{id}") public String getUser(@PathVariable("id") Long userId) {return "User ID: " + userId; }
-
@ResponseBody
- 作用:用于方法上,表示返回的对象会自动转为 JSON 或 XML 格式,作为 HTTP 响应体返回给客户端[5][7]。
- 示例:
@ResponseBody @GetMapping("/data") public Data getData() {return new Data(); }
六、切面与 AOP 相关注解
-
@Aspect
- 作用:定义一个切面类[1][5][7]。
- 示例:
@Aspect @Component public class LoggingAspect {}
-
@Before
- 作用:定义前置通知,在目标方法执行前运行[1][5][7]。
- 示例:
public class LoggingAspect {@Before("execution(* com.example.service.*.*(..))")public void logBefore(JoinPoint joinPoint) {System.out.println("Attempting to execute method: " + joinPoint.getSignature().getName());} }
-
@After
- 作用:定义后置通知,在目标方法执行后运行(无论是否发生异常)[1][5][7]。
- 示例:
public class LoggingAspect {@After("execution(* com.example.service.*.*(..))")public void logAfter(JoinPoint joinPoint) {System.out.println("Method executed successfully: " + joinPoint.getSignature().getName());} }
-
@Around
- 作用:定义环绕通知,在目标方法执行前后运行[1][5][7]。
- 示例:
public class LoggingAspect {@Around("execution(* com.example.service.*.*(..))")public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {System.out.println("Before executing method: " + joinPoint.getSignature().getName());Object result = joinPoint.proceed();System.out.println("After executing method: " + joinPoint.getSignature().getName());return result;} }
综上所述,Spring 框架提供了丰富的注解来简化企业级 Java 开发。通过合理利用这些注解,可以提高代码的可读性和可维护性,同时减少样板代码的数量。