在如今Spring Boot和Spring Cloud风生水起,Spring注解开发已成为主流开发模式,本篇将介绍常用的组件注册方式。我们所说的组件注册其实就是Spring 把合适的java类全部注册成spring Bean并把这些 Bean 对象交给 IOC 容器管理。

注册组件常用注解

常用的两个方式——组件注册注解(@Controller、@Service、@Repository 和@Component) + 包扫描注解(@ComponentScan)

  1. @Controller:一般用于控制器,即控制层组件;
  2. @Service:标识服务层(业务层)组件;
  3. @Repository:标识数据访问(持久)层组件;
  4. @Component:基本注解,标识了一个受Spring管理的组件,适用于所有层的组件。

@ComponentScan:根据自定义的规则,自动扫描 IOC 容器中所有组件。

        注解@ComponentScan:根据自定义的规则,默认会自动装配标识了@Controller,@Service,@Repository,@Component等注解的类到Spring容器中。

这几个注解主要用于标注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等几个最常见的注解的更多相关文章

  1. Spring中@Component注解,@Controller注解详解

    在使用Spring的过程中,为了避免大量使用Bean注入的Xml配置文件,我们会采用Spring提供的自动扫描注入的方式,只需要添加几行自动注入的的配置,便可以完成 Service层,Controll ...

  2. Spring中@Component注解,@Controller注解详解

    在使用Spring的过程中,为了避免大量使用Bean注入的Xml配置文件,我们会采用Spring提供的自动扫描注入的方式,只需要添加几行自动注入的的配置,便可以完成 Service层,Controll ...

  3. Java框架spring 学习笔记(九):Spring的bean管理(@Required、@Component、@Autowired、@Resource注解)

    注解:代码里面特殊的标记,使用注解可以完成相关功能 注解写法:@注解名称(属性名.属性值) @Required 用在set方法上,一旦用了这个注解,那么容器在初始化bean的时候必须要进行set,也就 ...

  4. Spring Boot@Component注解下的类无法@Autowired的问题

    title: Spring Boot@Component注解下的类无法@Autowired的问题 date: 2019-06-26 08:30:03 categories: Spring Boot t ...

  5. spring中@Component注解

    1.@controller 控制器(注入服务) 2.@service 业务(注入dao) 3.@repository dao(实现dao访问) 4.@component (把普通pojo实例化到spr ...

  6. 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 ...

  7. Spring Boot + Netty 中 @Autowired, @Value 为空解决

    问题描述 使用 Spring Boot + Netty 新建项目时 Handler 中的 @Autowired, @Value 注解的始终为空值 解决方法 @Component // 1. 添加 @C ...

  8. postman传递对象到spring controller的方式

    1.spring Controller @RestController @RequestMapping(value = "/basic/task") public class Ta ...

  9. 死磕Spring之IoC篇 - @Autowired 等注解的实现原理

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...

  10. Spring-Boot-Bean的使用,@Repository,@Service,@Controller,@Component

    前言 在Spring MVC的时候,我们使用xml来配置bean,如今的Spring boot推荐我们使用元注解的发生,那就听Spring Boot的推荐,下面我就为大家来介绍下Spring Boot ...

随机推荐

  1. 李沐动手学深度学习V2-chap_preliminaries

    李沐动手学深度学习V2 文章内容说明 本文主要是自己学习过程中的随手笔记,需要自取 课程参考B站:https://space.bilibili.com/1567748478?spm_id_from=3 ...

  2. 循环(Java篇)

    令人头痛的循环(:´д`)ゞ 我们在学习循环的时候可能会有点懵,什么是循环?它可以干嘛?我这里为什么要用循环来写这段代码?等问题. 首先我们来讲一下循环可以干嘛 循环是什么?o(′益`)o 在 Jav ...

  3. 写一个简单的SQL生成工具

    知识点: MyBatis 语法概览 MyBatis 是一个强大的数据持久化框架,它提供了一种半自动化的 ORM 实现方式.通过 MyBatis,开发者可以通过简单的 XML 或注解来配置和映射原生信息 ...

  4. Web前端入门第3问:前端需要学习哪些技术?

    Web前端开发技术学习路径 基础知识 必备 HTML+CSS+JavaScript ,就目前来看,这三板斧是入门前端开发的门槛,无论如何都是逃不掉了. 进阶知识 必须会一门主流的前端框架,比如:Rea ...

  5. MySQL常用SQL 语句

    --备份数据库 mysqldump -u用户名 -h主机名 -p密码 数据库名 > filename.sql --备份数据库中的某个表 mysqldump -u用户名 -h主机名 -p密码 数据 ...

  6. gazebo小车模型(附带仿真环境)

    博客地址:https://www.cnblogs.com/zylyehuo/ 参考链接 1.(https://blog.csdn.net/qq_43406338/article/details/109 ...

  7. Netty源码—8.编解码原理

    大纲 1.读数据入口 2.拆包原理 3.ByteToMessageDecoder解码步骤 4.解码器抽象的解码过程总结 5.Netty里常见的开箱即用的解码器 6.writeAndFlush()方法的 ...

  8. android中大咖:TlistView

    d的android中的Tlistview相当于cxGrid,其开发使用中的主咖地位至高无上. 可是如何高效使用快速实现的需求呢?需要的话补官方的教程 上图: GOODLUCK!

  9. Win10锁屏与关机相关设置-注册表

    禁用锁屏 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\SessionData ...

  10. Linux之用户和用户组管理

    概念 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须要拥有一个账号进入系统,账号实质上就是一个用户在系统上的标识.系统根据标识分配不同的权限和资源.一个账号包含用 ...