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

SSM框架学习-注解开发第三方bean管理

1. 复习xml配置文件管理第三方bean

在Spring中,可以使用依赖注入(Dependency
Injection)来管理和使用第三方Bean。Spring提供了多种方式来进行依赖注入,比如构造函数注入、Setter方法注入、字段注入等。下面以Setter方法注入为例:

  1. 首先,在Spring的配置文件中声明需要注入的第三方Bean的信息和需要注入的类的信息:
<bean id="thirdPartyBean" class="com.example.ThirdPartyBean" /><bean id="myService" class="com.example.MyService"><property name="thirdPartyBean" ref="thirdPartyBean" />
</bean>
  1. 在需要使用第三方Bean的类中,提供一个Setter方法来接收该Bean:
public class MyService {private ThirdPartyBean thirdPartyBean;public void setThirdPartyBean(ThirdPartyBean thirdPartyBean) {this.thirdPartyBean = thirdPartyBean;}// 使用thirdPartyBean进行操作
}

通过上述配置和代码,Spring就可以自动将第三方Bean注入到MyService类中,从而实现对第三方Bean的管理和使用。

2. 注解开发第三方bean管理

  • 方法一:导入式

在这里插入图片描述
在这里插入图片描述

  • 方法二:扫描式

不推荐使用,扫描式管理方式可能会导致依赖注入的性能问题。因为Spring在扫描classpath内的所有类并识别出需要注入的Bean时需要花费一定的时间。
一些较新的IoC容器,如Jigsaw,已经在尝试默认不进行扫描式管理。

在这里插入图片描述

部分代码优化,简单类型注入

public class JdbcConfig {//1.定义一个方法获得要管理的对象@Value("com.mysql.jdbc.Driver")private String driver;@Value("jdbc:mysql://localhost:3306/spring_db")private String url;@Value("root")private String userName;@Value("root")private String password;//2.添加@Bean,表示当前方法的返回值是一个bean//@Bean修饰的方法,形参根据类型自动装配@Beanpublic DataSource dataSource(){DruidDataSource ds = new DruidDataSource();ds.setDriverClassName(driver);ds.setUrl(url);ds.setUsername(userName);ds.setPassword(password);return ds;}
}

引用类型注入,只需要加入形参即可

原理是利用了Spring容器中的Bean定义和Bean工厂。当Spring容器启动时,会扫描所有的Bean定义,并将其解析为Bean工厂的Bean实例。这些Bean实例根据其作用域和生命周期管理,可以在整个应用程序的运行过程中被重复使用。

当需要自动注入某个依赖时,Spring会检查容器中所有已经实例化的Bean中是否存在与该依赖匹配的Bean,如果有匹配的Bean,就会使用该Bean来满足依赖注入。在引用类型注入时,Spring根据注解所在的位置,来确定需要注入的Bean的类型和名称,从而找到匹配的Bean实例进行注入

public DataSource dataSource(BookDao bookDao)

简单来说,当我们只需要在Java类中声明一个引用参数,而不需要显式创建一个Bean实例并将其传递给该参数,并以此获得一个依赖时,Spring会在容器中查找是否存在符合类型和名称的Bean实例,从而完成自动注入。这样可以减少重复代码的编写,并方便后续的维护和升级。

在这里插入图片描述

http://www.lryc.cn/news/66276.html

相关文章:

  • 【数据结构与算法】图——邻接表与邻接矩阵
  • 网安笔记02 密码学基础
  • open3d io操作
  • 【Linux】Linux安装Redis(图文解说详细版)
  • setTimeout不准时,CSS精准实现计时器功能
  • 单细胞跨模态分析综述
  • 【零基础学机器学习 1】什么是机器学习?
  • ARM处理器与中断——嵌入式(驱动)软开基础(一)
  • WX小程序 - 2
  • 开源之夏2023 | 欢迎申请openEuler Embedded SIG开发任务
  • 【异常解决】vim编辑文件时提示 Found a swap file by the name “.start.sh.swp“的解决方案
  • 「企业应用架构」应用架构概述
  • ePWM模块(3)
  • 【笔试强训选择题】Day11.习题(错题)解析
  • JVM知识
  • 操作系统第二章——进程与线程(中)
  • AlphaFold的极限:高中生揭示人工智能在生物信息学挑战中的缺陷
  • RocketMQ双主双从环境搭建
  • next.js博客搭建_初始化next项目(第一步)
  • ACM - 其他算法 - 基础(前缀和 + 差分)
  • No.056<软考>《(高项)备考大全》【冲刺10】《软考高项常见工具口语化解释》
  • MySQL原理(九):表分区和分库分表
  • 【Ehcache技术专题】「入门到精通」带你一起从零基础进行分析和开发Ehcache框架的实战指南(缓存查询-配置篇)
  • MySQL基础(七)单行函数
  • Cy5.5-PEG-FA结构式 荧光Cy5.5标记聚乙二醇叶酸;PEG分子量2000,叶酸(-FA)基团可应用于靶向传递
  • 【微服务笔记23】使用Spring Cloud微服务组件从0到1搭建一个微服务工程
  • 舞台特效-第14届蓝桥杯省赛Scratch初级组真题第2题
  • mysql 5.7.32安装及主从安装信息
  • leecode111——二叉树最短路径
  • Swift学习教程大纲