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

spring 常用注解区别及使用场景

1. 组件注册注解

@Bean
  • 作用:用于方法上,表示该方法返回的对象由Spring容器管理。通常用于配置类(@Configuration)中,注册第三方库或自定义的Bean。

  • 使用场合

    • 当你需要将非Spring管理的类(如第三方库的类)纳入Spring容器时。

    • 需要自定义Bean的初始化逻辑(如数据库连接池、RestTemplate等)。

  • 示例

    java

    复制

    @Configuration
    public class AppConfig {
        @Bean
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    }
@Service
  • 作用:用于上,标记该类为**业务逻辑层(Service层)**的组件,由Spring自动扫描并注册为Bean。

  • 使用场合

    • 业务逻辑层的实现类。

  • 示例

    java

    复制

    @Service
    public class UserServiceImpl implements UserService {
        // 业务逻辑代码
    }
@Controller
  • 作用:用于上,标记该类为Web控制器(MVC层),处理HTTP请求并返回响应。通常与@RequestMapping结合使用。

  • 使用场合

    • 定义Spring MVC的控制器。

  • 示例

    java

    复制

    @Controller
    public class UserController {
        @GetMapping("/users")
        public String listUsers() {
            return "users";
        }
    }

@Component@Service@Controller@Repository都是@Component的特殊化形式,功能类似,但语义更明确。


2. 依赖注入注解

@Autowired
  • 作用:由Spring提供,按**类型(byType)**自动装配依赖。如果存在多个同类型的Bean,需要结合@Qualifier指定名称。

  • 使用场合

    • 适用于Spring生态,推荐在纯Spring项目中使用。

  • 示例

    java

    复制

    @Service
    public class UserService {
        @Autowired
        private UserRepository userRepository;
    }
@Resource
  • 作用:由JSR-250规范提供,默认按**名称(byName)**自动装配,其次按类型(byType)。可以显式指定name属性。

  • 使用场合

    • 需要按名称注入时(如多个同类型Bean)。

    • 适用于需要与JavaEE兼容的场景。

  • 示例

    java

    复制

    @Service
    public class UserService {
        @Resource(name = "userRepositoryImpl")
        private UserRepository userRepository;
    }
@Qualifier
  • 作用:与@Autowired配合使用,指定具体的Bean名称(解决多个同类型Bean的冲突)。

  • 使用场合

    • 当存在多个相同类型的Bean时,明确指定注入哪一个。

  • 示例

    java

    复制

    @Service
    public class UserService {
        @Autowired
        @Qualifier("userRepositoryJpa")
        private UserRepository userRepository;
    }

关键区别总结

注解来源作用范围主要用途解决冲突方式
@BeanSpring方法注册第三方或自定义Bean通过方法名或@Qualifier
@ServiceSpring标记业务逻辑层组件-
@ControllerSpring标记Web控制器-
@AutowiredSpring字段/方法/构造器按类型自动装配结合@Qualifier
@ResourceJSR-250 (JavaEE)字段/方法按名称(优先)或类型自动装配通过name属性
@QualifierSpring字段/参数指定Bean名称(配合@Autowired-

使用场景建议

  1. 注册Bean

    • 如果是自定义类,优先用@Service@Controller等组件注解。

    • 如果是第三方类,用@Bean在配置类中显式定义。

  2. 依赖注入

    • 纯Spring项目:@Autowired + @Qualifier(按类型+名称)。

    • 需要兼容JavaEE或按名称注入:@Resource

  3. 解决冲突

    • 多个同类型Bean时,优先用@Qualifier@Resource(name="...")


示例代码

java

复制

@Configuration
public class AppConfig {
    @Bean
    public DataSource dataSource() {
        return new HikariDataSource();
    }
}

@Service
public class OrderService {
    @Autowired
    @Qualifier("dataSource")
    private DataSource dataSource;
}

@Controller
public class OrderController {
    @Resource
    private OrderService orderService;
}

理解这些注解的区别和适用场景,能帮助你更优雅地设计Spring应用架构。

相关文章:

  • vscode通过root远程连接wsl
  • MPU6050模块详解:从原理到STM32驱动指南(上) | 零基础入门STM32第八十九步
  • sqli-labs靶场 less5
  • DSP开发板的JTAG接口
  • vue复习
  • 塔能科技:用精准节能撬动社会效益的行业杠杆
  • 7.4考研408数据结构B树与B+树专题深度解析
  • 接口等幂处理
  • SpringBoot集成Logback终极指南:从控制台到云端的多维日志输出
  • Bootstrap5 复选框与单选框
  • strcpy和strncpy和strcat和strncat和strstr和strtok函数使用及实现
  • 【Python实例学习笔记】图像相似度计算--哈希算法
  • 多线程开发中List的使用
  • 力扣hot100:滑动窗口——找到字符串中所有字母异位词
  • ER图怎么做?智能 ER 图生成等功能全面解析
  • golang 同步与锁
  • devextreme-react/scheduler 简单学习
  • Android 常用工具类记录
  • Hosts文件与DNS的关系:原理、应用场景与安全风险
  • Linux 随机数据生成
  • wordpress怎么添加网盘下载/南昌seo外包公司
  • 织梦个人网站模板/在线磁力搜索神器
  • 中央政府门口网站建设理念/网络推广的优化服务
  • 科技类网站设计特点/网站设计与建设
  • 金湖网站制作/万网
  • 视频推广联盟/搜索引擎优化论文3000字