当前位置: 首页 > news >正文

面基Spring Boot项目中实用注解一

在Spring Boot项目中,实用注解根据功能可以分为多个类别。以下是常见的注解分类、示例说明及对比分析:


1. 核心配置注解

@SpringBootApplication
  • 作用:标记主启动类,组合了@Configuration@EnableAutoConfiguration@ComponentScan。 它用于标识Spring Boot应用程序的入口类,可以简化Spring应用程序的配置和启动过程。

  • 示例: 例子中,@SpringBootApplication注解被用于MyApplication类上,标识了这个类是Spring Boot应用程序的入口。

    @SpringBootApplication
    public class MyApp {
        public static void main(String[] args) {
            SpringApplication.run(MyApp.class, args);
        }
    }
  • 对比:相比手动组合多个注解,@SpringBootApplication简化了启动类配置。


2. 依赖注入与Bean管理

@Autowired
  • 作用:自动注入Bean,默认按类型匹配。

  • 示例

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

  • 对比:与@Resource(按名称注入)相比,@Autowired更灵活,支持@Qualifier细化匹配。(后期补充 @Qualifier 实用细节,未完成。。

@Component vs @Service vs @Repository
  • 共同点:均用于声明Bean。

  • 区别

    • @Component:通用注解。

    • @Service:标记业务层,强调事务性。

    • @Repository:标记数据层,自动转换数据访问异常。

  • 示例

    @Repository
    public class UserRepositoryImpl implements UserRepository {}


3. Web MVC注解

@RestController vs @Controller
  • @RestController:组合了@Controller@ResponseBody,直接返回JSON。 

    • 与@Controller类似,但@RestController会自动将返回值转换为JSON格式。它用于标注一个类,表示这个类是一个RESTful风格的控制器,可以处理HTTP请求并返回JSON/XML格式的响应。

  • @Controller:需配合@ResponseBody返回数据。

  • 示例

    @RestController
    public class UserController {
        @GetMapping("/users")
        public List<User> getUsers() {
            return userService.findAll();
        }
    }

         在这个例子中,@RestController注解被用于UserController类上,使得这个类成为了一个RESTful风格的控制器。@RequestMapping注解用于指定请求URL和处理方法之间的关系。

@GetMapping vs @RequestMapping
  • @GetMapping:简化版@RequestMapping(method = RequestMethod.GET)。    @RequestMapping用于映射请求URL和处理方法。它是Spring MVC框架中的一个核心注解,可以用于类级别和方法级别,指定请求URL和HTTP方法(GET、POST、PUT、DELETE等)。@GetMapping、@PostMapping等是@RequestMapping的派生注解,用于简化特定HTTP方法的映射。

  • 示例

    @GetMapping("/user/{id}")
    public User getUser(@PathVariable Long id) { ... }

    示例二:

    @RestController
    @RequestMapping("/api")
    public class UserController {
        @GetMapping("/users")
        public List<User> getUsers() {
            // 获取用户列表
        }
    
        @PostMapping("/users")
        public void createUser(@RequestBody User user) {
            // 创建新用户
        }
    }

    在这个例子中,@GetMapping和@PostMapping注解分别用于映射HTTP GET和POST请求到对应的方法上。


4. 数据访问与事务

@Entity & @Table
  • 作用:JPA实体映射。

  • 示例

    @Entity
    @Table(name = "users")
    public class User { ... }

@Transactional
  • 作用:声明式事务管理。

  • 对比:与编程式事务(手动管理)相比,代码更简洁。

  • 示例

    @Transactional
    public void updateUser(User user) {
        userRepository.save(user);
    }


5. 配置与属性绑定

@ConfigurationProperties
  • 作用:将配置文件属性绑定到Bean。

  • 对比:比@Value更高效,支持批量注入。

  • 示例

    @ConfigurationProperties(prefix = "datasource")
    public class DataSourceConfig {
        private String url;
        private String username;
        // getters & setters
    }


6. 切面编程(AOP)

@Aspect & @Around
  • 作用:定义切面和环绕通知。

  • 示例

    @Aspect
    @Component
    public class LoggingAspect {
        @Around("execution(* com.example.service.*.*(..))")
        public Object logMethod(ProceedingJoinPoint joinPoint) throws Throwable {
            // 记录日志逻辑
            return joinPoint.proceed();
        }
    }


7. 测试相关

@SpringBootTest vs @WebMvcTest
  • @SpringBootTest:全量集成测试,加载完整上下文。

  • @WebMvcTest:仅加载Web层上下文,轻量级。

  • 示例

    @SpringBootTest
    class UserServiceIntegrationTest { ... }
    
    @WebMvcTest(UserController.class)
    class UserControllerTest { ... }


对比总结

注解典型场景替代方案优势
@SpringBootApplication主启动类配置手动组合多个注解简化配置,减少冗余代码
@RestController返回JSON的控制器@Controller + @ResponseBody代码更简洁
@Autowired依赖注入XML配置或@Resource按类型自动匹配,灵活
@Transactional声明式事务编程式事务(如TransactionTemplate代码侵入性低,易于维护
@GetMapping定义GET请求路由@RequestMapping(method=GET)可读性更高,语法简洁

总结

Spring Boot注解通过约定大于配置的理念,显著简化了开发。合理选择注解(如用@RestController替代传统@Controller)能提升代码可读性和维护性,而对比不同注解(如@Autowired@Resource)有助于理解Spring的设计哲学。实际开发中应根据场景选择最合适的注解。

注意:

        spring项目常用注解-URL: 地基spring注解部分一-CSDN博客

(抱歉,最近在面试,粗糙了些。)

(望各位潘安、各位子健/各位彦祖、于晏不吝赐教!多多指正!🙏)

相关文章:

  • 电子电气架构 --- 电子电器新技术及发展趋势
  • [JVM篇]垃圾回收器
  • Windows第九章 控件的介绍
  • 共指消解问题的早期研究成果主要来自自然语 言处理领域
  • AdaMix
  • PH热榜 | 2025-02-16
  • c语言基础09
  • 什么决定了硬件设计质量?
  • Web后端 - Maven管理工具
  • 深入解析计算机网络请求头:常见类型与安全性影响
  • FFmpeg源码:url_find_protocol函数分析
  • maven——使用idea创建maven项目(文件夹上颜色)
  • 15.2 ProcessStartInfo类
  • 浏览器Cookies、SessionStorage 和 LocalStorage
  • RL--2
  • 机器学习:十大算法实现汇总
  • 组件库地址
  • 神经网络新手入门(3)光明顶复出(2006-2012)
  • 每日OJ_牛客_Pre-Post(英文题树的遍历_排列组合)
  • Linux下的Python开发环境
  • 菲律宾中期选举结果揭晓,马科斯与杜特尔特家族重回“权力的游戏”
  • 全国林业院校校长论坛举行,聚焦林业教育的创新与突破
  • 澎湃与七猫联合启动百万奖金征文,赋能非虚构与现实题材创作
  • 大陆非遗项目打铁花、英歌舞将在台演出
  • 混乱的5天:俄乌和谈如何从充满希望走向“卡壳”
  • 清雪车司机未拉手刹下车导致溜车被撞亡,事故调查报告发布