spring一些常用注解及其作用

本文介绍Spring MVC框架中常用注解的使用方法,包括@Controller、@RestController、@RequestMapping及其简化注解如@GetMapping、@PostMapping等的功能与示例。此外还介绍了@Component、@Repository、@Service等注解的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@Controller 处理http请求的控制器
例子:
@Controller
public class HelloController {

    @RequestMapping(value="/hello",method= RequestMethod.GET)
    public String sayHello(){
        return "hello";
    }
}

@RestController

Spring4之后新加入的注解,原来返回json需要@ResponseBody和@Controller配合。

即@RestController是@ResponseBody和@Controller的组合注解。

例子:

@RestController
public class HelloController {

    @RequestMapping(value="/hello",method= RequestMethod.GET)
    public String sayHello(){
        return "hello";
    }
}

@RequestMapping 配置url映射

@RequestMapping此注解即可以作用在控制器的某个方法上,也可以作用在此控制器类上;@RequestMapping中的method参数有很多中选择,一般使用get/post.

当控制器在类级别上添加@RequestMapping注解时,这个注解会应用到控制器的所有处理器方法上。处理器方法上的@RequestMapping注解会对类级别上的@RequestMapping的声明进行补充。

 

@RequestMapping(value="/queryById") 普通请求
@RequestMapping(value="/hello",method= RequestMethod.GET) get请求 

@RequestMapping(value="/hello",method= RequestMethod.POST) post请求 

常用的基本上就valuemethod了。其简化注解有

@GetMapping 等同于 @RequestMapping(method = RequestMethod.GET)
@PostMapping 等同于 @RequestMapping(method = RequestMethod.POST)
@PutMapping 等同于 @RequestMapping(method = RequestMethod.PUT)
@DeleteMapping 等同于 @RequestMapping(method = RequestMethod.DELETE)
@PatchMapping 等同于 @RequestMapping(method = RequestMethod.PATCH)

一些其他注释:

Spring 来扫描指定包下的类,并注册被@Component,@Controller,@Service,@Repository等注解标记的组件

 

  • @Component 最普通的组件,可以被注入到spring容器进行管理
  • @Repository 作用于持久层
  • @Service 作用于业务逻辑层@Resource(这个注解属于J2EE的),默认安照名称进行装配,名称可以通过name属性进行指定
  • @Resource(这个注解属于J2EE的),默认安照名称进行装配,名称可以通过name属性进行指定(例:@Resource(name="userService"))

 

转载于:https://www.cnblogs.com/nxjblog/p/10612011.html

<think>嗯,用户想了解Spring常用注解及其介绍。首先,我需要回忆一下Spring框架中常用注解,特别是核心容器、数据访问、Web MVC等方面的。可能还需要分门别类,方便用户理解。 首先,核心容器相关的注解,比如@Component,@Service,@Repository,@Controller,还有@Autowired和@Configuration,@Bean这些。这些是Spring的基础,控制反转和依赖注入相关的。 然后是Spring MVC的注解,像@Controller,@RestController,@RequestMapping,@GetMapping这些。用户如果做Web开发的话,这些肯定很重要。还有处理参数的注解,比如@PathVariable,@RequestParam,@RequestBody。 接下来是数据访问层的,比如@Transactional,@Repository,还有Spring Data JPA的@Query,@Modifying之类的。可能还要提到JPA相关的注解,但用户可能更关心Spring的而不是JPA本身的。 还有配置相关的,@Configuration,@ComponentScan,@PropertySource,@Value这些。AOP的注解,比如@Aspect,@Before,@After等。 另外,Spring Boot的常用注解可能也要包括进来,比如@SpringBootApplication,@EnableAutoConfiguration,虽然用户问的是Spring,但Spring Boot现在很常用,可能也需要提一下。 需要确保每个注解的解释清晰,给出作用和使用场景,最好有简单的代码示例。比如@Component用于类,让Spring自动检测并注册为Bean,@Service在服务层使用,@Repository在数据访问层。 可能还需要注意,有些注解Spring特有的,比如@Autowired,而@Resource是Java标准的。要指出它们的区别。 用户可能对某些注解的细节不太清楚,比如@Controller和@RestController的区别,或者@PathVariable和@RequestParam的不同使用场景。需要简明扼要地解释。 另外,关于作用域,@Scope注解可能也需要提到。还有条件化配置的注解,比如@Conditional,但可能属于高级内容,如果用户是初学者,可能暂时不需要深入。 需要检查是否有遗漏的重要注解,比如@Primary,@Qualifier,用于解决依赖注入冲突的情况。还有@Profile,用于环境配置。 最后,组织这些注解,按照类别分点说明,结构清晰,方便用户查阅。每个注解给出作用、使用场景、示例代码。确保用中文,术语准确,同时示例代码使用正确的LaTeX格式,行内的用$...$,独立成段的用$$...$$,但用户的问题中可能不需要数学公式,所以主要关注注解的代码部分,用反引号包裹或者适当格式。 需要避免错误,比如混淆JPA和Spring注解,确保每个注解的正确归属。例如,@Entity是JPA的,而@Repository是Spring的。虽然相关,但用户可能希望分开。 总结一下,结构应该是分几大模块:核心注解、Web相关、数据访问、配置、AOP、Spring Boot相关等。每个模块下列出常用注解,解释和示例。</think>以下是Spring框架的常用注解及其分类介绍,按功能模块组织: --- ### 一、核心容器注解(IoC/DI) 1. **@Component** - **作用**:标记类为Spring管理的组件,自动扫描注册为Bean - **示例**: ```java @Component public class UserService { ... } ``` 2. **衍生注解**(功能相同,语义化分类) - **@Service**:用于业务逻辑层 - **@Repository**:用于数据访问层(自动转换数据库异常) - **@Controller**:用于Web控制层 3. **@Autowired** - **作用**:自动注入依赖(按类型匹配) - **示例**: ```java @Autowired private UserRepository userRepo; ``` 4. **@Qualifier** - **作用**:配合`@Autowired`按名称指定Bean - **示例**: ```java @Autowired @Qualifier("mysqlUserRepo") private UserRepository userRepo; ``` 5. **@Primary** - **作用**:当存在多个同类型Bean时,标记优先注入的候选 --- ### 二、Web MVC注解 1. **@Controller** - **作用**:定义Web请求处理类 2. **@RestController** - **作用**:组合`@Controller` + `@ResponseBody`,直接返回JSON数据 - **示例**: ```java @RestController public class UserController { @GetMapping("/users") public List<User> getUsers() { ... } } ``` 3. **@RequestMapping** - **作用**:映射HTTP请求路径和方法 - **衍生简化注解**: - `@GetMapping` - `@PostMapping` - `@PutMapping` - `@DeleteMapping` 4. **@PathVariable** - **作用**:绑定URL路径参数 - **示例**: ```java @GetMapping("/users/{id}") public User getUser(@PathVariable Long id) { ... } ``` 5. **@RequestParam** - **作用**:绑定HTTP请求参数(默认必传,可通过`required=false`关闭) - **示例**: ```java @GetMapping("/search") public List<User> search(@RequestParam String keyword) { ... } ``` 6. **@RequestBody** - **作用**:将HTTP请求体反序列化为Java对象(通常用于接收JSON) --- ### 三、配置相关注解 1. **@Configuration** - **作用**:声明配置类(替代XML配置) 2. **@Bean** - **作用**:在配置类中定义Bean(方法级别) - **示例**: ```java @Configuration public class AppConfig { @Bean public DataSource dataSource() { ... } } ``` 3. **@ComponentScan** - **作用**:指定Spring扫描组件的包路径 - **示例**: ```java @ComponentScan("com.example.service") ``` 4. **@PropertySource** - **作用**:加载外部配置文件(如`.properties`) - **示例**: ```java @PropertySource("classpath:app.properties") ``` 5. **@Value** - **作用**:注入配置文件中的值 - **示例**: ```java @Value("${database.url}") private String dbUrl; ``` --- ### 四、数据访问注解 1. **@Transactional** - **作用**:声明事务管理(可配置传播行为和隔离级别) - **示例**: ```java @Transactional public void updateUser(User user) { ... } ``` 2. **@Repository** - **作用**:标记数据访问层类(自动处理持久化异常) --- ### 五、AOP相关注解 1. **@Aspect** - **作用**:声明切面类 2. **通知类型注解** - `@Before`:前置通知 - `@After`:后置通知 - `@Around`:环绕通知 - `@AfterThrowing`:异常通知 --- ### 六、Spring Boot增强注解 1. **@SpringBootApplication** - **作用**:组合注解(`@Configuration` + `@ComponentScan` + `@EnableAutoConfiguration`) 2. **@EnableAutoConfiguration** - **作用**:启用Spring Boot自动配置 --- ### 附:注解对比表 | 注解 | 应用场景 | 示例场景 | |-----------------|-------------------------|-----------------------| | `@Component` | 通用组件注册 | 工具类、第三方库适配 | | `@Service` | 业务逻辑层 | UserService、OrderService | | `@Repository` | 数据访问层 | UserRepository | | `@RestController` | 返回JSON的Web接口 | RESTful API控制器 | --- 通过合理使用这些注解,可以显著简化Spring应用的开发配置流程。建议结合具体场景选择合适的注解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值