当前位置: 首页 > news >正文

Spring注解开发,bean的作用范围及生命周期、Spring注解开发依赖注入


在这里插入图片描述

🐌个人主页: 🐌 叶落闲庭
💨我的专栏:💨
c语言
数据结构
javaweb

石可破也,而不可夺坚;丹可磨也,而不可夺赤。


Spring注解开发

  • 一、注解开发定义Bean
  • 二、纯注解开发Bean
  • 三、bean的管理
    • 3.1bean的作用范围
    • 3.2bean的生命周期
  • 四、注解开发依赖注入
  • 五、bean管理
    • 5.1第三方bean管理
    • 5.2第三方bean依赖注入
    • 5.2.1简单依赖注入
    • 5.2.2引用依赖注入

一、注解开发定义Bean

  • 使用@Component定义bean:
@Component("bookDao")
public class BookDaoImpl1 implements BookDao {@Overridepublic void save() {System.out.println("BookDao save...");}
}
  • 核心配置文件中通过组件扫描加载bean:
<context:component-scan base-package="com.practice"/>
  • 代码效果:
public class App1 {public static void main(String[] args) {ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext1.xml");BookDao bookDao = (BookDao) act.getBean("bookDao");System.out.println(bookDao);//按类型找BookService bookService = act.getBean(BookService.class);System.out.println(bookService);}
}

在这里插入图片描述


  • Spring提供@Component注解的三个衍生注解:
    • @Controller:用于表现层bean定义
    • @Service:用于业务层bean定义
    • @Repository:用于数据层bean定义

二、纯注解开发Bean

  • java类代替了Spring核心配置文件
  • Spring核心配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="com.practice"/>
</beans>
  • java类:
@Configuration
@ComponentScan("com.practice")
public class SpringConfig {}
  • @Configuration表示配置文件,当前类为配置类
  • @ComponentScan表示扫描包下的配置信息,设定扫描路径,此注解只能添加一次,多个数据请用数组格式。
@ComponentScan({"com.practice.dao","com.practice.service"})
  • 读取Spring核心配置文件初始化容器切换为读取Java配置类初始化容器对象
//读取Spring核心配置文件
ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext1.xml");
//读取Java配置类
ApplicationContext act = new AnnotationConfigApplicationContext(SpringConfig.class);

三、bean的管理

3.1bean的作用范围

  • 单例对象:
@Repository("bookDao1")
@Scope("singleton")
public class BookDaoImpl2 implements BookDao {@Overridepublic void save() {System.out.println("BookDao save...");}
}
@Configuration
@ComponentScan("com.practice")
public class SpringConfig {}
public class AppForAnnotation1 {public static void main(String[] args) {ApplicationContext act = new AnnotationConfigApplicationContext(SpringConfig.class);BookDao bookDao1 = (BookDao) act.getBean("bookDao1");BookDao bookDao2 = (BookDao) act.getBean("bookDao1");System.out.println(bookDao1);System.out.println(bookDao2);}
}

在这里插入图片描述


  • 非单例:
@Repository("bookDao1")
@Scope("singleton")
public class BookDaoImpl2 implements BookDao {@Overridepublic void save() {System.out.println("BookDao save...");}
}
@Configuration
@ComponentScan("com.practice")
public class SpringConfig {}
public class AppForAnnotation1 {public static void main(String[] args) {ApplicationContext act = new AnnotationConfigApplicationContext(SpringConfig.class);BookDao bookDao1 = (BookDao) act.getBean("bookDao1");BookDao bookDao2 = (BookDao) act.getBean("bookDao1");System.out.println(bookDao1);System.out.println(bookDao2);}
}

在这里插入图片描述


  • 使用@Scope("singleton")定义bean的作用范围

3.2bean的生命周期

  • 使用@PostConstruct@PreDestroy定义bean的生命周期
@Repository("bookDao1")
@Scope("singleton")
public class BookDaoImpl2 implements BookDao {@Overridepublic void save() {System.out.println("BookDao save...");}@PostConstructpublic void init() {System.out.println("BookDao init...");}@PreDestroypublic void destroy() {System.out.println("BookDao destroy...");}}

在这里插入图片描述


四、注解开发依赖注入

  • 使用@Autowired注解开启自动装配模式(按类型)
@Service
public class BookServiceImpl implements BookService {@Autowiredprivate BookDao bookDao;@Overridepublic void save() {System.out.println("bookService save...");bookDao.save();}
}
  • 自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因此无需提供setter方法
  • 自动装配建议使用无参构造方法创建对象(默认),如果不提供对应构造方法,请提供唯一的构造方法
  • 使用@Qualifier注解开启指定名称装配bean
@Service
public class BookServiceImpl implements BookService {@Autowired@Qualifier("bookDao2")private BookDao bookDao;@Overridepublic void save() {System.out.println("bookService save...");bookDao.save();}
}
  • 注意:@Qualifier注解无法单独使用,必须配合@Autowired注解使用
  • 使用@Value()实现简单注入
@Repository("bookDao")public class BookDaoImpl1 implements BookDao {@Value("practice")private String name;@Overridepublic void save() {System.out.println("BookDao save..." + name);}
}

在这里插入图片描述


  • 使用@PropertySource注解加载properties文件
@Configuration
@ComponentScan("com.practice")
@PropertySource({"jdbc3.properties"})
public class SpringConfig {
}
  • 注意:路径仅支持单一文件配置,多文件请使用数组格式配置,不能使用通配符*

五、bean管理

5.1第三方bean管理

  • 使用@Bean配置第三方bean
public class JdbcConfig {//1.定义方法获得要管理的对象//2.添加注解@Beanpublic DataSource dataSource(){DruidDataSource ds = new DruidDataSource();ds.setDriverClassName("com.mysql.jdbc.Driver");ds.setUrl("jdbc:mysql://localhost:3306/mybatis");ds.setUsername("root");ds.setPassword("123456");return ds;}
}
  • 将独立的配置类加入核心配置
    • 方式一:导入式
public class JdbcConfig {//1.定义方法获得要管理的对象//2.添加注解@Beanpublic DataSource dataSource(){DruidDataSource ds = new DruidDataSource();ds.setDriverClassName("com.mysql.jdbc.Driver");ds.setUrl("jdbc:mysql://localhost:3306/mybatis");ds.setUsername("root");ds.setPassword("123456");return ds;}
}
  • 使用注解手动加入配置类到核心配置,此注解只能添加一次,多个数据采用数组形式
@Import({JdbcConfig.class})
public class SpringConfig {
}
  • 将独立的配置加入核心配置
  • 方式二:扫描式
@Configuration
public class JdbcConfig {//1.定义方法获得要管理的对象//2.添加注解@Beanpublic DataSource dataSource(){DruidDataSource ds = new DruidDataSource();ds.setDriverClassName("com.mysql.jdbc.Driver");ds.setUrl("jdbc:mysql://localhost:3306/mybatis");ds.setUsername("root");ds.setPassword("123456");return ds;}
}
  • 使用注解扫描配置类所在的包,加载对应的配置类信息
@Configuration
@ComponentScan("com.practice")
public class SpringConfig {
}

5.2第三方bean依赖注入

5.2.1简单依赖注入

public class JdbcConfig {@Value("com.mysql.jdbc.Driver")private String driver;@Value("jdbc:mysql://localhost:3306/mybatis")private String url;@Value("root")private String userName;@Value("123456")private String passWord;//1.定义方法获得要管理的对象//2.添加注解@Beanpublic DataSource dataSource(){DruidDataSource ds = new DruidDataSource();ds.setDriverClassName(driver);ds.setUrl(url);ds.setUsername(userName);ds.setPassword(passWord);return ds;}
}

5.2.2引用依赖注入

  • 引用类型注入只需要为bean定义方法设置形参即可,容器会根据类型自动装配对象
@Beanpublic DataSource dataSource(BookService bookService){DruidDataSource ds = new DruidDataSource();ds.setDriverClassName(driver);ds.setUrl(url);ds.setUsername(userName);ds.setPassword(passWord);return ds;}

相关文章:

Spring注解开发,bean的作用范围及生命周期、Spring注解开发依赖注入

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaweb 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 Spring注解开发 一、注解开发定义Bean二、纯注解开发Bean三…...

C#设计模式之---原型模式

原型模式&#xff08;Prototype Pattern&#xff09; 原型模式&#xff08;Prototype Pattern&#xff09; 是用原型实例指定创建对象的种类&#xff0c;并且通过拷贝这些原型创建新的对象。原型模式是一种创建型设计模式。也就是用一个已经创建的实例作为原型&#xff0c;通过…...

STM32入门学习之外部中断

1.STM32的IO口可以作为外部中断输入口。本文通过按键按下作为外部中断的输入&#xff0c;点亮LED灯。在STM32的19个外部中断中&#xff0c;0-15为外部IO口的中断输入口。STM32的引脚分别对应着0-15的外部中断线。比如&#xff0c;外部中断线0对应着GPIOA.0-GPIOG.0&#xff0c;…...

Jenkins 配置maven和jdk

前提:服务器已经安装maven和jdk 一、在Jenkins中添加全局变量 系统管理–>系统配置–>全局属性–>环境变量 添加三个全局变量 JAVA_HOME、MAVEN_HOME、PATH 二、配置maven 系统管理–>全局工具配置–>maven–>新增 新增配置 三、配置JDK 在系统管…...

Leetcode | Binary search | 22. 74. 162. 33. 34. 153.

22. Generate Parentheses 要意识到只要还有左括号&#xff0c;就可以放到path里。只要右括号数量小于左括号&#xff0c;也可以放进去。就是valid的组合。recurse两次 74. Search a 2D Matrix 看成sorted list就好。直接用m*n表示最后一位的index&#xff0c;并且每次只需要 …...

生命在于折腾——面试问题汇总

这里面的问题都是我参加面试时候遇到的问题&#xff0c;大家就这样看吧。 一、个人情况 1、自我介绍 2、为什么离开上一家公司 3、有没有参加过HVV 4、介绍一下上家公司的项目 5、小程序和公众号渗透测试做过么 6、实习工资多少 7、有挖过漏洞么 二、基础知识 1、信息收集的…...

<Java>Map<String,Object>中解析Object类型数据为数组格式

背景&#xff1a; 前端&#xff1a;入参为字符串和数组类型&#xff1b;通过json字符串传给后台&#xff0c; 后台&#xff1a;后台通过工具解析为Map<String&#xff0c;Object>&#xff0c;然后需要解析出Map里面的数组值做操作&#xff1b; 需求&#xff1a; 入参&…...

别再分库分表了,试试TiDB!

什么是NewSQL 传统SQL的问题 升级服务器硬件 数据分片 NoSQL 的问题 优点 缺点 NewSQL 特性 NewSQL 的主要特性 三种SQL的对比 TiDB怎么来的 TiDB社区版和企业版 TIDB核心特性 水平弹性扩展 分布式事务支持 金融级高可用 实时 HTAP 云原生的分布式数据库 高度兼…...

Java进阶之Dump文件初体验

视频地址&#xff1a;https://www.bilibili.com/video/BV1Ak4y137oh 学习文章&#xff1a;https://d9bp4nr5ye.feishu.cn/wiki/VQoAwlzrXiLFZekuLIyc1uK5nqc 最近线上频繁的内存告警&#xff0c;同事A通过分析dump文件解决了这个问题&#xff0c;我当然是不会放过这种学习的机…...

基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

曲线拟合(MATLAB拟合工具箱)位置前馈量计算(压力闭环控制应用)

利用PLC进行压力闭环控制的项目背景介绍请查看下面文章链接,这里不再赘述。 信捷PLC压力闭环控制应用(C语言完整PD、PID源代码)_RXXW_Dor的博客-CSDN博客闭环控制的系列文章,可以查看PID专栏的的系列文章,链接如下:张力控制之速度闭环(速度前馈量计算)_RXXW_Dor的博客-CSD…...

小程序使用echarts

参考文档&#xff1a;echarts官网、echarts-for-weixin 第一步引入组件库&#xff0c;可直接从echarts-for-weixin下载&#xff0c;也可以从echarts官网自定义生成&#xff0c;这里我们就不贴了组件库引入好后&#xff0c;就是页面引用啦&#xff0c;废话不多说&#xff0c;直…...

面向对象——封装

C面向对象的三大特性为&#xff1a;封装、继承、多态 C认为万事万物都皆为对象&#xff0c;对象上有其属性和行为 例如&#xff1a; ​ 人可以作为对象&#xff0c;属性有姓名、年龄、身高、体重…&#xff0c;行为有走、跑、跳、吃饭、唱歌… ​ 车也可以作为对象&#xf…...

【LeetCode】160.相交链表

题目 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结…...

【JWT的使用】

文章目录 前言1、用户登录1.1 JWTThreadLocal 2.1 代码实现2.1.1 ThreadLocal工具类2.2.2 定义拦截器2.2.3 注册拦截器 前言 1、用户登录 1.1 JWT JSON Web Token简称JWT&#xff0c;用于对应用程序上用户进行身份验证的标记。使用 JWTS 之后不需要保存用户的 cookie 或其他…...

Python获取音视频时长

Python获取音视频时长 Python获取音视频时长1、安装插件2、获取音视频时长.py3、打包exe4、下载地址 Python获取音视频时长 1、安装插件 pip install moviepy -i https://pypi.tuna.tsinghua.edu.cn/simple2、获取音视频时长.py 上代码&#xff1a;获取音视频时长.py # -*-…...

TCP四次握手为什么客户端等待的时间是2MSL

目录 什么是MSL从第三次握手开始分析总结 什么是MSL MSL是Maximum Segment Lifetime英文的缩写&#xff0c;中文可以译为“报文最大生存时间”&#xff0c;他是任何报文在网络上存在的最长时间&#xff0c;超过这个时间报文将被丢弃。 从第三次握手开始分析 第三次握手服务端…...

Android Studio 启用设备远程调试配置完整步聚

启用手机设置->开发者选项-无线调试,然后选择允许 已启用后无线调试变成绿色 ,点击无线调试进入详情页面 点击Android Studio的Device Manager 下的WIFI图标 会弹出下图窗口 打开手机的开发者选项中的WIFI调试(无线调试)下的使用二维码配对设备进行扫描. 设备配对成功后手机…...

玩转LaTeX(三)【数学公式(基础)、​矩阵、多行公式】

数学公式基础 导言区&#xff08;引包&#xff09; \usepackage{amsmath} %带星号的eqution 正文区 \begin{document}%数学公式初步 \section{简介} \LaTeX{}将排版内容分为文本模式和数学模式。文本模式用于普通文本排版&#xff0c;数学模式用于数学公式排版。 …...

jenkins 配置git

在linux 中输入 保证git 安装成功 git --version使用查看git 安装目录&#xff08;非源码安装直接用yum 安装的&#xff09; which gitjenkins 中到 系统管理–>全局工具配置–> Git installations 新建一个项目 选择自由风格 源码管理选择 git 如果使用的是码云&a…...

单机部署MinIo并设置开机自启

MinIO 是高性能的对象存储&#xff0c;是为海量数据存储、人工智能、大数据分析而设计的&#xff0c;它完全兼容Amazon S3接口&#xff0c;单个对象最大可达5TB&#xff0c;适合存储海量图片、视频、日志文件、备份数据和容器/虚拟机镜像等。MinIO主要采用Golang语言实现&#…...

Latex | 使用MATLAB生成.eps矢量图并导入Latex中的方法

一、问题描述 用Latex时写paper时&#xff0c;要导入MATLAB生成的图进去 二、解决思路 &#xff08;1&#xff09;在MATLAB生成图片的窗口中&#xff0c;导出.eps矢量图 &#xff08;2&#xff09;把图上传到overleaf的目录 &#xff08;3&#xff09;在文中添加相应代码 三…...

宝塔面板定时任务重启各种服务

一个php项目&#xff0c;laravel框架&#xff0c;使用了nginx php redis mysql 还有进程守护supervisor&#xff0c;用于laravel的异步队列进程queue&#xff0c;当服务器重启后有可能部分服务没有成功启动这个时候可以用定时任务去检查服务状态&#xff0c;然后对不正常的自动…...

Ansible playbook编写

目录 palybooks 组成示例&#xff1a;运行palybook定义&#xff0c;引用变量when 条件判断循环Templates模块tags 模块 palybooks 组成 Tasks&#xff1a;任务&#xff0c;即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行Variables&#xff1a;变量Temp…...

个人博客系统 -- 登录页面添加图片验证码

目录 1. 功能展示 2. 前段代码 3. 后端代码 1. 功能展示 在登录页面添加验证码登录 1. 检测到没有输入验证码或者输入的验证码错误时,进行弹窗提示.并且刷新当前验证码图片 2. 点击验证码进行刷新 2. 前段代码 1. 添加验证码标签,在密码的下面,在login.html进行修改 主要…...

剑指offer10-I.斐波那契数列

学计算机的对这道题肯定不陌生&#xff0c;我记得是学C语言的时候学递归的时候有这道题&#xff0c;于是我就世界用递归写了如下代码&#xff1a; class Solution {public int fib(int n) {if(n1) return 1;if(n0) return 0;return (fib(n-1) fib(n-2)) % 1000000007;} } 到…...

13年测试经验,性能测试-压力测试指标分析总结,看这篇就够了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 一般推荐&#xf…...

大数据课程D3——hadoop的Source

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Source的AVRO Source; ⚪ 掌握Source的Exec Source; ⚪ 掌握Source的Spooling Directory Source; ⚪ 掌握Source的Netcat Source; ⚪ 掌握Source的Sequence Generator Source;…...

F5 LTM 知识点和实验 4-持久化

第四章:持久化 持久化: 大多数应用都是有状态的,比如,使用一个购物网站,最重要的是用户在放入一个商品之后,刷新网页要能继续看到购物车里的东西,这就需要请求报文发到同一个后端服务器上,持久化就能完成这个功能。 持久化支持一下几种场景: 源地址目标地址SSLSIPH…...

SpringBoot之WebMvcConfigurer详解

目录 一、基本介绍 二、WebMvcConfigurer接口展示 三、常用方法列举 3.1 addInterceptors&#xff1a;添加拦截器 3.2 addResourceHandlers&#xff1a;添加静态资源 3.3 addCorsMappings&#xff1a;添加跨域 编写的初衷是为了自己巩固复习&#xff0c;如果能帮到你将是…...

烟台H5网站设计公司/东莞网站建设推广技巧

点击上方“Github爱好者社区”&#xff0c;选择星标回复“资料”&#xff0c;获取小编整理的一份资料作者 l Hollis来源 l Hollis在我的博客和公众号中&#xff0c;发表过很多篇关于并发编程的文章&#xff0c;之前的文章中我们介绍过了两个在Java并发编程中比较重要的两个关键…...

如何做英文网站的外链/seo描述快速排名

常用的shell命令包括&#xff1a;ls(列出文件)、cd(切换目录)、mkdir(创建目录)、mv(移动或重命名文件)、rm(删除文件)、cat(显示文件内容)、echo(显示文本)、man(查看命令手册)等。...

励志做的很好的网站/中国腾讯和联通

注意&#xff1a; 如果dll文件不写相对路径&#xff0c;需要吧dll文件和执行代码放在同一个文件夹中 参考文章&#xff1a;https://blog.csdn.net/mixiao25184/article/details/18604385 文件结构&#xff1a; 代码如下&#xff1a; //BIN_LIB为JAR包中存放DLL的路径//getReso…...

乐清市规划图高清/天津seo网络营销

在$_REQUEST[where] $where;$storeQuery->process_views($currentModule);上面加入以下代码,下面的代码指默认为查询本月if($where){ $date_period thismonth; $date_from get_date_from($date_period); $date_to get_date_to($date_period); if(isset($date_from) &…...

https下安装wordpress/对网站进行seo优化

资源整理。这次太久没更新&#xff0c;最近比较忙。老规矩拆成两篇。 Coding: 1.比较独立&#xff0c;部分汇集和系统发育知识的生态位模型。“Niche estimation above and below the species level. Trends in Ecology and Evolution”论文的附件。 phyloENM TREE 2.用于生态预…...

武汉汉口做网站价格/企业营销推广

文/ 智能相对论&#xff08;ID&#xff1a;aixdlun&#xff09; 作者/ 布兰 “Chaos is a ladder&#xff0c;混乱是阶梯。” 用《权力的游戏》中这句话来形容现在的手机市场&#xff0c;再恰当不过了。 遭遇“黑天鹅”&#xff0c;华为于去年拆分出售荣耀。1月25日&#x…...