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技术非常火热,作 ...
随机推荐
- SVN重新定位操作流程
因服务器其他系统需要SVN原来使用的443端口无法继续使用需要更换,服务器SVN端口已更新为8443,现将个人电脑SVN文件夹路径重新定位流程展示如下: 确定即修改成功!
- 为什么使用HTTP2?
最近我们公司的官网由原来的http1.1已升级到http2,而我们前端开发对http2还是一片懵懂,更不知道为何换成了这个,故此补充了下http2的相关知识. http1.1相比于http1.0有哪些 ...
- IT兄弟连 HTML5教程 响应式网站的内容设计
基于响应式开发网站,除了页面的布局是我们设计的重点,网站中显示的图片和文字也是我们不能轻视的内容. 1 响应式图片显示内容设计 真正具有响应性的Web设计是完全调整网站以满足访问者的设备.我们需要在 ...
- Maven使用教程三:maven的生命周期及插件机制详解
前言 今天这个算是学习Maven的一个收尾文章,里面内容不局限于标题中提到的,后面还加上了公司实际使用的根据profile配置项目环境以及公司现在用的archetype 模板等例子. 后面还会总结一个 ...
- 利用百度AI快速开发出一款“问答机器人”并接入小程序
先看实现效果: 利用百度UNIT预置的智能问答技能和微信小程序,实现语音问答机器人.这里主要介绍小程序功能开发实现过程,分享主要功能实现的子程序模块,都是干货! 想了解UNIT预置技能调用,请参看我之 ...
- 网页解析库-Xpath语法
网页解析库 简介 除了正则表达式外,还有其他方便快捷的页面解析工具 如:lxml (xpath语法) bs4 pyquery等 Xpath 全称XML Path Language, 即XML路径语言, ...
- JVM调优之服务内存超过阈值报警
今早收到一条短信,具体报警信息如下: [UMP JVM监控内存报警]应用名:发券worker(jdos_couponwkr);KEY[coupon.send.worker.jvm],主机名:[host ...
- openssl 证书请求和签名命令req基本分析
一 基本概念: OpenSSL 是一个开源项目,其组成主要包括一下三个组件: openssl:多用途的命令行工具 libcrypto:加密算法库 libssl:加密模块应用库,实现了ssl及tls o ...
- python语言的鸭子类型和强类型语言的多态
python语言的鸭子类型和强类型语言的多态 前面讲接口类的时候举过一个有关支付方式的例子,支付方式可以有几种,微信支付,支付宝支付,苹果支付等,这几个不同的支付都统一于支付,像这样几个类都统一于 某 ...
- Python 学习笔记(基础篇)
背景:今年开始搞 Data science ,学了 python 小半年,但一直没时间整理整理.这篇文章很基础,就是根据廖雪峰的 python 教程 整理了一下基础知识,再加上自己的一些拓展,方便自己 ...