Spring @Controller、@Component和@Autowired等几个最常见的注解
在如今Spring Boot和Spring Cloud风生水起,Spring注解开发已成为主流开发模式,本篇将介绍常用的组件注册方式。我们所说的组件注册其实就是Spring 把合适的java类全部注册成spring Bean并把这些 Bean 对象交给 IOC 容器管理。
注册组件常用注解
常用的两个方式——组件注册注解(@Controller、@Service、@Repository 和@Component) + 包扫描注解(@ComponentScan) 。
- @Controller:一般用于控制器,即控制层组件;
- @Service:标识服务层(业务层)组件;
- @Repository:标识数据访问(持久)层组件;
- @Component:基本注解,标识了一个受Spring管理的组件,适用于所有层的组件。
@ComponentScan:根据自定义的规则,自动扫描 IOC 容器中所有组件。
这几个注解主要用于标注Spring要进行实例化的类,一旦在某个类的上面标注了这样的注解,如果是单例模式的话,那么Spring在初始化的时候,就会将这些类实例化,而对于非单例模式的类,不取决于Spring容器本身,往往是客户端进行请求的时候,进行创建实例(Spring创建的)。@Component可以代替@Repository、@Service、@Controller,因为这三个注解是被@Component标注的,当组件不好归类的时候,我们可以使用这个注解进行标注。
思考:Spring怎么知道哪些Java类应该当作bean类处理?
答:使用配置文件或者注解的方式进行标识需要处理的java类,这些被标注的类被Spring识别为bean类。
装配组件常用注解
@Resource:按照名称(name)进行注入。该注解属于jdk中的注解,但是在项目中使用比较广泛。
@Autowired:按照类型匹配自动注入。
@Inject:和@Autowired注解一样也是按类型注入bean,但是没有required属性。
以上三个注解主要用于为类中属性注入值,它们可以将(上面四个组件标注注解标注的类在Spring中实例化后的对象)装配到某些类的属性中。
Spring注解实战
例如,使用@Repository注册UserDao的组件到Spring容器:
@Repository
public interface UserDao {
User getUserById(Long userId);
}
使用@Autowired把组件UserDao装配到UserServiceImpl实现类中:
@Service
public class UserServiceImpl implements UserService {
private static Logger logger = LoggerFactory.getLogger(UserServiceImpl.class); @Autowired
private UserDao userDao;
@Override
public User getUserById(Long userId) {
logger.info("--------*****-----------");
return userDao.getUserById(userId);
}
}
这里,@Service将UserServiceImpl注册成组件托管给Spring容器。
结束语
由于本文只是综述性质的文章,这里就不展开讨论了。如有不当之处,请留言讨论。
Spring @Controller、@Component和@Autowired等几个最常见的注解的更多相关文章
- Spring中@Component注解,@Controller注解详解
在使用Spring的过程中,为了避免大量使用Bean注入的Xml配置文件,我们会采用Spring提供的自动扫描注入的方式,只需要添加几行自动注入的的配置,便可以完成 Service层,Controll ...
- Spring中@Component注解,@Controller注解详解
在使用Spring的过程中,为了避免大量使用Bean注入的Xml配置文件,我们会采用Spring提供的自动扫描注入的方式,只需要添加几行自动注入的的配置,便可以完成 Service层,Controll ...
- Java框架spring 学习笔记(九):Spring的bean管理(@Required、@Component、@Autowired、@Resource注解)
注解:代码里面特殊的标记,使用注解可以完成相关功能 注解写法:@注解名称(属性名.属性值) @Required 用在set方法上,一旦用了这个注解,那么容器在初始化bean的时候必须要进行set,也就 ...
- Spring Boot@Component注解下的类无法@Autowired的问题
title: Spring Boot@Component注解下的类无法@Autowired的问题 date: 2019-06-26 08:30:03 categories: Spring Boot t ...
- spring中@Component注解
1.@controller 控制器(注入服务) 2.@service 业务(注入dao) 3.@repository dao(实现dao访问) 4.@component (把普通pojo实例化到spr ...
- Spring Injection with @Resource, @Autowired and @Inject
August 1st, 2011 by David Kessler Overview I’ve been asked several times to explain the difference b ...
- Spring Boot + Netty 中 @Autowired, @Value 为空解决
问题描述 使用 Spring Boot + Netty 新建项目时 Handler 中的 @Autowired, @Value 注解的始终为空值 解决方法 @Component // 1. 添加 @C ...
- postman传递对象到spring controller的方式
1.spring Controller @RestController @RequestMapping(value = "/basic/task") public class Ta ...
- 死磕Spring之IoC篇 - @Autowired 等注解的实现原理
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...
- Spring-Boot-Bean的使用,@Repository,@Service,@Controller,@Component
前言 在Spring MVC的时候,我们使用xml来配置bean,如今的Spring boot推荐我们使用元注解的发生,那就听Spring Boot的推荐,下面我就为大家来介绍下Spring Boot ...
随机推荐
- 【Ryan】: linux下安装ftp
在 Linux 系统下安装 FTP 服务器可以使用多种软件,其中最常见的是 vsftpd(Very Secure FTP Daemon)和 ProFTPD(Professional FTP Daemo ...
- MySql 主从(备)部署 | 冷备份
前言 MySQL 主从复制(Master-Slave Replication)是一种常见的数据库架构设计,用于提高数据可用性.实现读写分离以及支持备份策略.冷备份是指在数据库关闭状态下进行的数据备份方 ...
- Laravel 配置连接多个数据库以及如何使用
目录 配置连接 配置 .env 文件 配置 \config\database.php 文件 使用 Schema Query Eloquent 配置连接 配置 .env 文件 /* 这部分是默认的数据库 ...
- 痞子衡嵌入式:记录为i.MXRT1060更换较大容量Flash(IS25LP064A_IS25LP128F)导致二级App异常启动问题解决全过程(上篇)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是为i.MXRT1060更换较大容量Flash导致二级App异常启动问题. 痞子衡最近在支持一个 RT1062 国外客户项目,客户在项目预 ...
- Content-Encoding:br 是一种什么编码格式?
一.前言 在之前测试HTTP应答的压缩过程中无意间发现在Google浏览器下出现了 Content-Encoding:br 这种的编码格式,当时我就纳闷了,前面不是一直在研究GZip压缩吗?br压缩又 ...
- Open R1 项目进展第一期
DeepSeek R1 发布已经两周了,而我们启动 open-r1 项目--试图补齐它缺失的训练流程和合成数据--也才过了一周.这篇文章简单聊聊: Open-R1 在模仿 DeepSeek-R1 流程 ...
- python练习-爬虫(续)
流程: 1 设置url 2 设置消息头 3 设置消息体 4 获取响应 5 解析相应 6 验证数据 接下来就是查询数据了. # 识别图片中的文字 #image = Image.open('captcha ...
- AI 大模型科普-概念向
我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:奇铭 什么是大模型(LLM) 大模型(LLM)即大型语言模 ...
- PHP连MYSQL查询结果中文乱码的完美解决方法
问题背景:近日接手同事的一个项目(wampserver环境),配置好环境,导库完毕,打开页面一看中文全是问号.打开network看了下请求,请求结果里的中文也一样乱码了.懵逼... 解决方法:打开My ...
- 79.8K star!这款开源自动化神器让技术团队效率飙升,400+集成玩转AI工作流!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 "n8n 是技术团队自动化领域的瑞士军刀,既能享受可视化搭建的便捷,又能随时插入代 ...