Spring注解的使用和组件扫描
非常重要】 组件扫描(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注解的使用和组件扫描的更多相关文章
- Spring注解驱动开发01(组件扫描使用详解)
使用Spring注解代替XML的方式 以前都是通过xml配bean的方式来完成bean对象放入ioc容器,即使通过@Aotuwire自动装配bean,还是要创建一个xml文件,进行包扫描,显得过于繁琐 ...
- spring注解开发:ComponentScan组件扫描
在使用xml方式配置时,我们只需要在xml中配置如下代码: <context:component-scan base-package="包名"></context ...
- 【Spring注解驱动开发】组件注册-@ComponentScan-自动扫描组件&指定扫描规则
写在前面 在实际项目中,我们更多的是使用Spring的包扫描功能对项目中的包进行扫描,凡是在指定的包或子包中的类上标注了@Repository.@Service.@Controller.@Compon ...
- 【建议收藏】阿里P7总结的Spring注解笔记,把组件注册讲的明明白白
环境搭建 注解的方式是通过配置类的方式来注入组件,注解注入要比XML注入的方式简单,注解注入也需要在前者的基础上,添加一个spring-context的包,也是实际开发中常用的方式. 准备所需Jar包 ...
- spring注解第02课 包扫描@ComponentScan、@ComponentScans
1.配置文件形式: <context:component-scan base-package="com.atguigu" /> spring会扫描此包下的@Servic ...
- Spring注解驱动开发(一)-----组件注册
注册bean xml方式 1.beans.xml-----很简单,里面注册了一个person bean <?xml version="1.0" encoding=" ...
- spring注解开发:容器中注册组件方式
1.包扫描+组件标注注解 使用到的注解如下,主要针对自己写的类 @Controller @Service @Repository @Component @ComponentScan 参考 spring ...
- spring作用、spring注解、管理对象的作用域与生命周期、自动装配、Spring的框架包有哪些作用是什么
Spring 1. 作用 创建和管理对象,使得开发过程中,可以不必使用new关键字创建对象,而是直接获取对象!并且,还可以通过一些配置,使得某些获取到的对象,其中某些属性已经是被赋值的! 2. Spr ...
- 0、Spring 注解驱动开发
0.Spring注解驱动开发 0.1 简介 <Spring注解驱动开发>是一套帮助我们深入了解Spring原理机制的教程: 现今SpringBoot.SpringCloud技术非常火热,作 ...
随机推荐
- 多个DataTable的合并成一个新表
多个DataTable的合并成一个新表 参考:https://www.cnblogs.com/JuneZhang/archive/2011/12/11/2284243.html
- dev gridcontrol简单的动态设置动态表头
1)使用BandedGridView控件(此处演示BandedGridView控件包含8个列)2)往BandedGridView控件里添加GridBand控件(此处演示添加了4个) 3)///设置添加 ...
- 如何将hive表中的数据导出
近期经常将现场的数据带回公司测试,所以写下该文章,梳理一下思路. 1.首先要查询相应的hive表,比如我要将c_cons这张表导出,我先查出hive中是否有这张表. 查出数据,证明该表在hive中存在 ...
- 《Java基础知识》Java多态和动态绑定
在Java中,父类的变量可以引用父类的实例,也可以引用子类的实例. 请读者先看一段代码: public class Demo { public static void main(String[] ar ...
- 函数式响应式编程 - Functional Reactive Programming
我们略过概念,直接看函数式响应式编程解决了什么问题. 从下面这个例子展开: 两个密码输入框,一个提交按钮. 密码.确认密码都填写并一致,允许提交:不一致提示错误. HTML 如下: <input ...
- Oracle 创建用户,赋予指定表名/视图只读权限
步骤指南 创建用户 格式:; 语法:create user 用户名 identified by 密码; 注:密码不行的话,前后加(单引号):' create user TEST identified ...
- 松软科技Web课堂:重要->JavaScript 调试
错误总会发生,每当您写一些新的计算机代码时. JavaScript 调试 在没有调试器的情况下写 JavaScript 是有难度的. 您的代码中也许包含了语法错误,或者逻辑错误,这些都难以诊断. 通常 ...
- 浅析椭圆曲线加密算法(ECC)
本文首发于先知社区,原文链接:https://xz.aliyun.com/t/6295 数学基础 黎曼几何中的"平行线" 欧几里得<几何原本>中提出五条公设: 过相异两 ...
- mysql-5.7.21-winx64安装教程
1 . 下载对用的版本信息 地址是:https://dev.mysql.com/downloads/mysql/ 2 . 解压到目录 D:\tools\mysql\mysql-5.7.21-winx6 ...
- 利用keras自带路透社数据集进行多分类训练
import numpy as np from keras.datasets import reuters from keras import layers from keras import mod ...