非常重要】 组件扫描(Component-Scan)

  • 通过配置组件扫描,可以使得spring自动扫描package,而不必在spring的配置文件中逐一声明各个<bean>
  • 在配置组件扫描时,指定的包是“根包”,即例如指定了cn.tedu.spring,spring不只会扫描这个包,还会扫描它的各个层级子包,例如:cn.tedu.spring.dao
  • 直接在spring的配置文件中开启组件扫描即可 <context:component-scan base-package="cn.tedu.spring"></context:component-scan>
  • 注意: 仅仅开启组件扫描spring是不会自动管理bean的,而是自动的扫描package,要想自动管理bean,那么还需要配置注解

注解

  • 在类的声明上方添加@Component注解,可以是的spring知道这个类是一个组件,需要进行管理,所以如过某个类需要被Spring管理,应该将这个类放在被扫描的包中,并且添加注解
  • 由Spring扫描到的组件(由@Component注解标记的类),会由Spring自动设置Bean Id,值为将类名首字母小写的名称,例如组件类的名称是UserDao,则配置的Bean的id是userDao,如果需要自定义Bean,那么可以直接在注解中设置,比如@Component("id")

前提

  • 一定要是在开启组件扫描的包下使用注解,否则将不会扫描到配置的注解

常用注解

  • 可以混用,暂时这几个注解没有差异,完全功能相同,但是我们还是要根据规则使用
  • @Component : 通用注解
  • @Service : 用于对业务逻辑类的注解(Service层)
  • @Controller : 用于对控制器类的注解
  • @Repository :用于对持久层处理类的注解(Dao层)
  • @Named :通用注解(不用)
  • 以上5个注解从实现目标和效果是等效的,但是基于方便理解代码的目的,应该按需使用,了;例如对名为UserService类的,应该使用@Service

其他注解

@Scope

  • 在类的声明语句上方添加这个注解,用于设置bean的作用域,比如@Scope("prototype")表示非单例,默认是单例

@Lazy

  • 在单例模式下设置是否懒加载,例如@Lazy("true")用于设置成懒加载
  • 在类的声明语句上方添加
  • 前面之前已经说过,在创建Bean的时候默认使用的是单例模式下的饿汉式的创建,即是在spring配置文件加载的时候创建

@PostConstruct

  • 将方法设置为生命周期的初始化方法
  • 设置初始化方法,直接在初始化方法的声明语句中添加即可
    @PostConstruct
public void init(){
System.out.println("初始化方法");
}

@PreDestroy(单例模式下才会销毁)

  • 在方法的声明语句上方使用,可以将这个方法设置为生命周期的销毁方法
@PreDestroy
public void destroy(){
System.out.println("销毁方法");
}

注入值

@Autowired (不推荐使用)

  • 在类中,在声明属性的上方添加@Autowired,用于标记该属性是自动装配值
  • 这种自动装配默认按照类型(byType)实现自动装配
  • 如果需要按照名称(byName)来自动装配,还需要使用@Qualifier("userDao")来组合使用,注解中配置的名称是需要注入的值的Bean-Id
  • UserDao
@Repository("userDao")
public class UserDaoImpl implements UserDao{
public void reg() {
System.out.println("reg");
}
}
  • UserService
@Service
public class UserService {
@Autowired
@Qualifier("userDao")
private UserDao userDao;
public void reg(){
userDao.reg();
}
}

@Resource (推荐使用)

  • 在需要注入的属性的上方添加该注解
  • 默认先按照名称来自动装配的(byName),如果名称对应不上,那么按照类型(byType)进行匹配
    @Resource
private UserDao userDao;
  • 如果使用@Resource(name="userDaoImpl"),name属性指定的是Bean Id,添加了name属性,那么只是按照名称来装配,如果这个名称对应的Bean不存在,那么就注入失败
    @Resource(name="userDaoImpl")
private UserDao userDao;

@Value

  • 使用@Value注解添加在属性的声明的上方,可以对属性注入值
  • 直接注入值
    @Value("陈加兵")
private String name;
  • 在使用@Value("#{beanId.属性名}")的注解时还可以使用Spring表达式

https://cloud.tencent.com/developer/article/1120386

Spring注解的使用和组件扫描的更多相关文章

  1. Spring注解驱动开发01(组件扫描使用详解)

    使用Spring注解代替XML的方式 以前都是通过xml配bean的方式来完成bean对象放入ioc容器,即使通过@Aotuwire自动装配bean,还是要创建一个xml文件,进行包扫描,显得过于繁琐 ...

  2. spring注解开发:ComponentScan组件扫描

    在使用xml方式配置时,我们只需要在xml中配置如下代码: <context:component-scan base-package="包名"></context ...

  3. 【Spring注解驱动开发】组件注册-@ComponentScan-自动扫描组件&指定扫描规则

    写在前面 在实际项目中,我们更多的是使用Spring的包扫描功能对项目中的包进行扫描,凡是在指定的包或子包中的类上标注了@Repository.@Service.@Controller.@Compon ...

  4. 【建议收藏】阿里P7总结的Spring注解笔记,把组件注册讲的明明白白

    环境搭建 注解的方式是通过配置类的方式来注入组件,注解注入要比XML注入的方式简单,注解注入也需要在前者的基础上,添加一个spring-context的包,也是实际开发中常用的方式. 准备所需Jar包 ...

  5. spring注解第02课 包扫描@ComponentScan、@ComponentScans

    1.配置文件形式: <context:component-scan base-package="com.atguigu" /> spring会扫描此包下的@Servic ...

  6. Spring注解驱动开发(一)-----组件注册

    注册bean xml方式 1.beans.xml-----很简单,里面注册了一个person bean <?xml version="1.0" encoding=" ...

  7. spring注解开发:容器中注册组件方式

    1.包扫描+组件标注注解 使用到的注解如下,主要针对自己写的类 @Controller @Service @Repository @Component @ComponentScan 参考 spring ...

  8. spring作用、spring注解、管理对象的作用域与生命周期、自动装配、Spring的框架包有哪些作用是什么

    Spring 1. 作用 创建和管理对象,使得开发过程中,可以不必使用new关键字创建对象,而是直接获取对象!并且,还可以通过一些配置,使得某些获取到的对象,其中某些属性已经是被赋值的! 2. Spr ...

  9. 0、Spring 注解驱动开发

    0.Spring注解驱动开发 0.1 简介 <Spring注解驱动开发>是一套帮助我们深入了解Spring原理机制的教程: 现今SpringBoot.SpringCloud技术非常火热,作 ...

随机推荐

  1. Python爬虫基础——XPath语法的学习与lxml模块的使用

    XPath与正则都是用于数据的提取,二者的区别是: 正则:功能相对强大,写起来相对复杂: XPath:语法简单,可以满足绝大部分的需求: 所以,如果你可以根据自己的需要进行选择. 一.首先,我们需要为 ...

  2. 2016/09/22 mapreduce

    1.概念 Mapreduce是一个计算框架,表现形式是有个输入(input),mapreduce操作这个输入,通过本身定义好的计算模型,得到一个输出(output),也就是我们需要的结果. 在运行一个 ...

  3. 约数之和(POJ1845 Sumdiv)

    最近应老延的要求再刷<算法进阶指南>(不得不说这本书不错)...这道题花费了较长时间~(当然也因为我太弱了)所以就写个比较易懂的题解啦~ 原题链接:POJ1845 翻译版题目(其实是AcW ...

  4. javascript树形汇总金额

    在开发企业应用的时候总会遇到树形汇总金额的场景,即将树形的列表中的叶子节点(没有子节点)的金额汇总到父节点上. 这种需求一般是在前端进行处理,即使用JavaScript处理,因为叶子节点的金额可能是不 ...

  5. Oracle Proc编程性能优化经验

    Proc 是Oracle提供的一种数据库操作的API.它是基于ESql技术的,需要预编译后才可以变成普通c代码,非常不直观,使用起来不太方便,阅读也存在困难. 因为这些问题导致程序员平时开发中会出现一 ...

  6. SpannableStringBuilder实现图文混排

    1.我的后面添加图片 ssb = new SpannableStringBuilder("我的后面添加图片: "); ssb.setSpan(, , Spannable.SPAN_ ...

  7. PMBOK 指南 第四章 项目整合管理(4.1-4.3)

    项目整合管理 包括对隶属于项目管理过程组的各个过程和项目管理活动进行识别.定义.组合.统一和协调的各个过程. 资源分配.平衡竞争性需求.研究各种备选方法.为实现项目目标而裁剪过程.管理各个项目管理知识 ...

  8. js解决客户端与服务器时间不一致的问题

    引出 最近在写一个项目时,要根据时间进行不同的展示,直接用new Date().getTime()获取当前时间,结果就出问题了.有些用户擅自修改自己的本地时间,导致获取到的时间并不是当前时间,尴尬. ...

  9. RabbitMQ 离线安装(带视频)

    疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 架构师成长+面试必备之 高并发基础书籍 [Netty Zookeeper Redis 高并发实战 ] 疯狂创客圈 高并 ...

  10. tornado框架中redis使用

    一.安装依赖 pip3 install tornado-redis 二.导入模块 import tornadoredis 三.创建redis对象 import tornadoredis CONNECT ...