Spring之配置非自定义Bean

news2024/11/16 3:15:54

目录

一:概述

二:代码演示

         1)配置Druid数据源交由Spring管理  


一:概述

               以上在xml中配置的Bean都是自己定义的, 例如:UserDaolmpl, UserServicelmpl。但是, 在实际开发中有些 功能类并不是我们自己定义的, 而是使用的第三方jar包中的, 那么, 这些Bean要想让Spring进行管理, 也需要对 其进行配置 配置非自定义的Bean需要考虑如下两个问题:

  • 被配置的Bean的实例化方式是什么?无参构造、有参构造、静态工厂方式还是实例工厂方式;

  • 被配置的Bean是否需要注入必要属性。

二:代码演示

         1)配置Druid数据源交由Spring管理  

1.导入Druid坐标

<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<!--druid数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.23</version>
</dependency>

2.在xml文件中进行配置,并定义相关的属性

<!--配置数据源信息-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
    <property name="url" value="jdbc:mysql://localhost:3306/db_shopping"></property>
    <property name="username" value="root"></property>
    <property name="password" value="1234"></property>
</bean>

3.测试

public static void main(String[] args) {
    //创建ApplicationContext,加载配置文件,实例化容器
    ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
    //获取druid数据源信息,测试是否配置成功
    Object bean = applicationContext.getBean("dataSource");
    System.out.println(bean);//json格式数据
    /*{
	CreateTime:"2022-11-23 14:28:33",
	ActiveCount:0,
	PoolingCount:0,
	CreateCount:0,
	DestroyCount:0,
	CloseCount:0,
	ConnectCount:0,
	Connections:[
	]
}
*/

}

2).配置Connection交由Spring管理

              Connection的产生是通过DriverManager的静态方法getConnection获取的, 所以我们要用静态工厂(DriverManage)方式配置

<!--配置Connection-->
<!-- Class.forName(com.mysql.jdbc.Driver)   静态工厂-->
<bean class="java.lang.Class" factory-method="forName">
    <constructor-arg name="className"  value="com.mysql.jdbc.Driver"/>
</bean>

<!-- Connection connection=DriverManager.getConnection(url,user,passsword)-->
<bean id="connection"  class="java.sql.DriverManager" factory-method="getConnection"  scope="prototype"> <constructor-arg name="url" value="jdbc:mysql:///mybatis"/>
<constructor-arg name="user"value="root"/>
<constructor-arg name="password"value="1234"/>
</bean>

3.配置日期对象交由Spring管理

       产生一个指定日期格式的对象,原始代码按如下:

String currentTimeStr="2023-08-27 07:20:00";
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date=simpleDateFormat.parse(currentTimeStr) ;

<!--可以看成是实例工厂方式,使用Spring配置方式产生Date实例-->
<!--配置日期对象-->
<!--工厂-->
<bean id="simpleDateFormat" class="java.text.SimpleDateFormat">
      <constructor-arg name="pattern" value="yyyy-MM-dd HH:mm:ss"/>
</bean>
<bean id="date" factory-bean="simpleDateFormat" factory-method="parse">
      <constructor-arg name="source" value ="2023-08-27 07:20:00"/>
</bean>

4.配置MyBatis的SqlSessionFactory交由Spring管理

    ①:导入MyBatis的相关坐标:

<!--mybatis框架-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>

②:原始代码

//读取配置文件
//静态工厂方法方式
InputStream resource = Resources.getResourceAsStream("mybatis-config.xml");
//设置构造器
//无参构造实例化
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
//构建工厂
//实例工厂方法
SqlSessionFactory build = builder.build(resource);

③:主xml文件配置

<!--静态工厂方法方式-->
 <bean id="in"  class="org.apache.ibatis.io.Resources" factory-method="getResourceAsStream">
        <constructor-arg name="resource" value="mybatis-config.xml"></constructor-arg>
  </bean>
  <!--无参构造实例化-->
  <bean id="builder"  class="org.apache.ibatis.session.SqlSessionFactoryBuilder"></bean>
   <!--实例工厂方法-->
  <bean id="sqlSessionFactory" factory-bean="builder" factory-method="build">
      <constructor-arg name="inputStream" ref="in"></constructor-arg>
  </bean>

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"></property>
                <property name="url" value="jdbc:mysql://localhost:3306/db_shopping"></property>
                <property name="username" value="root"></property>
                <property name="password" value="1234"></property>
            </dataSource>
        </environment>
    </environments>
</configuration>

④:测试

ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
<!--方式一:-->
 Object bean = applicationContext.getBean("sqlSessionFactory");
 System.out.println(bean);//org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@4b168fa9
 <!--方式二:-->
  SqlSessionFactory factory = (SqlSessionFactory) applicationContext.getBean("sqlSessionFactory");
  SqlSession sqlSession = factory.openSession();
  System.out.println(sqlSession);//org.apache.ibatis.session.defaults.DefaultSqlSession@3b2cf7ab

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/136926.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

包装器和绑定器std::bind和std::function的回调技术

回调函数 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数&#xff0c;当这个指针被用来调用其所指向的函数时&#xff0c;我们就说这是回调函数。回调函数不是由该函数的实现方直接调用&#xff0c;而是在…

低代码搭建门店管理之收发货管理系统

随着电商的深入&#xff0c;不少门店都开始采用线上模式进行销售了&#xff0c;并且有的门店线上销售更是比线下销售更加火爆。因此&#xff0c;线上销售务必会涉及到收发货这个步骤。以前线上销售刚兴起的时候收发货只靠人工纸质化登记就能搞定&#xff0c;但是随着线上销售的…

盘点这些年稚晖君的DIY项目,看看他的技术栈有多强

近日&#xff0c;知名极客稚晖君在个人微博发文称自己将离职创业&#xff0c;开启一段新的旅程&#xff0c;“天才少年”将在机器人领域继续发光发热。 自2020年初发布第一个出圈视频《技术宅UP耗时三个月&#xff0c;自制B站最强小电视&#xff01;》以来&#xff0c;稚晖君共…

Vue实例的基本属性,computed计算属性,watch监听属性以及过滤器filters

目录 一、Vue实例的属性 二、Vue实例的计算属性&#xff1a;computed。计算属性结果会被缓存起来&#xff0c;当依赖的响应式属性发生变化时&#xff0c;才会重新计算&#xff0c;返回最终结果。 三、Vue实例的状态监听属性&#xff1a;watch&#xff0c;可以对元素的值的变…

JVM垃圾回收相关算法-垃圾标记阶段

文章目录学习资料垃圾回收概念概述垃圾回收相关算法垃圾标记阶段&#xff1a;对象存活判断引用计数算法可达性分析算法&#xff08;或根搜索算法、追踪性垃圾收集&#xff09;【Java使用算法】基本思路GC Roots对象的finalization机制对象处于三种可能的状态具体过程学习资料 …

WebDAV之葫芦儿·派盘+WebDAV Nav Lite

WebDAV Nav Lite 支持WebDAV方式连接葫芦儿派盘。 支持连接所有WebDAV服务器、云存储、NAS设备的管理工具,并可以直接管理设备内的文件?那快来试下WebDAV Nav Lite自动同步与管理工具吧。 WebDAV Nav Lite允许您

【Bootstrap】CSS全局样式

目录 一、HTML5文档类型 二、移动设备优先 三、禁用移动设备上的缩放功能 四、布局容器 1. container 类 ​2. container-fluid 类 五、标题 六、页面主体 七、文本 1. 内联文本元素 2. 文本对齐 ​3. 改变大小写 八、列表 1. 无序列表 2. 有序列表 3. 无样式列…

Hadoop数据仓库有哪些特征?

数据仓库(英语&#xff1a;Data Warehouse&#xff0c;简称数仓、DW),是一个用于存储、分析、报告的数据系统。数据仓库的目的是构建面向分析的集成化数据环境&#xff0c;分析结果为企业提供决策支持(Decision Support)。 数据仓库本身并不“生产”任何数据&#xff0c;其数据…

(1分钟)速通BA优化--光束法平差

SLAM中的BA优化&#xff0c;先根据相机模型和A,B图像特征匹配好的像素坐标&#xff0c;求出A图像上的像素坐标对应的归一化的空间点坐标&#xff0c;然后根据该空间点的坐标计算重投影到B图像上的像素坐标&#xff0c;重投影的像素坐标(估计值)与匹配好的B图像上的像素坐标(测量…

java流程控制的三种类型

1. 简介 在Java项目中&#xff0c;大多数的代码都是编写在一个个的类里面。每个类中还有很多个语句&#xff0c;并且会以英文的分号;来表示语句的结束。有些小白会很好奇&#xff0c;这一行行的代码语句是按照什么顺序执行的呢&#xff1f;是按照我们看到的从上到下的顺序执行…

【瑞萨RA4系列】CoreMark移植完全指南——UART输出和SysTick计时的应用

【瑞萨RA4系列开发板体验】CoreMark移植完全指南——UART输出和SysTick计时的应用 文章目录【瑞萨RA4系列开发板体验】CoreMark移植完全指南——UART输出和SysTick计时的应用一、CoreMark简介二、基础功能支持2.1 创建RASC项目2.2 确认UART引脚2.3 打开RASC配置2.4 配置UART引脚…

javac 编译期拓展之实现 CallSuper 注解功能

javac 编译期拓展之 实现 CallSuper 注解功能 背景&#xff1a; 元旦之前&#xff0c;就和朋友探讨了这么一个问题。比如我在一个父类的 a 方法里做了一些逻辑&#xff0c;这个逻辑是必须存在的&#xff0c;假如现在子类要重写这个 a 方法&#xff0c; 那么他就需要先调用父类…

docker(一):基本组成与常用命令

文章目录1. docker基本组成1.1 镜像(image)1.2 容器(container)1.3 仓库(repository)2. docker常用命令2.1 启动类命令2.2 镜像命令2.3 容器命令1. docker基本组成 1.1 镜像(image) docker镜像(image)就是一个只读的模板。镜像可以用来创建docker容器&#xff0c;一个镜像可以…

中职组网络安全2023年山东省省赛Linux 系统渗透提权

B-3:Linux 系统渗透提权 任务环境说明: 服务器场景:Server2204(关闭链接) 用户名:hacker 密码:123456 使用渗透机对服务器信息收集,并将服务器中 SSH 服务端口号作为 flag 提 交;Flag:2283/tcp 使用渗透机对服务器信息收集,并将服务器中主机名称作为 flag 提交;F…

通过keepalived实现高可用

192.168.184.128 主/heartbeat1 192.168.184.129 从/heartbeat2 192.168.184.131 漂移地址 主备基础&#xff1a;需要在128和129服务器上&#xff0c;搭建mysql主从复制 环境基础配置 128、129操作关闭防火墙 # sed -i "s/SELINUXenforcing/SELINUXdisabled/g"…

内卷加速的手机市场,如何寻找新契机?

从此前争相入局的一亿像素摄像头&#xff0c;到不断加码的快充、屏幕刷新率&#xff0c;再到眼下不那么成熟却“硬要上阵”的屏下摄像头技术&#xff0c;原本应该通过技术创新提升用户体验的手机行业&#xff0c;变得越来越内卷&#xff0c;业内人士分析认为手机内卷造成消费者…

【阶段二】Python数据分析Pandas工具使用04篇:数据预处理:数据的汇总

本篇的思维导图: 数据预处理:数据的汇总 数据透视表pivot_table()函数 透视表功能该功能的主要目的就是实现数据的汇总统计。pandas模块中的pivot_table函数就是实现透视表功能的强大函数。 代码 import numpy as

linux解压

linux中主要有.zip&#xff0c;.gz&#xff0c;.bz2及.tar.gz和.tar.bz2等压缩格式 一、.zip&#xff0c;.gz&#xff0c;.bz2格式 .zip格式语法&#xff1a; zip 压缩文件名 源文件 #压缩文件 &#xff08;也能压缩目录&#xff0c;但只会压缩第一个目录&#xff0c;目录中…

牛客网C++项目-Linux高并发服务器开发之第一章:Linux系统编程入门 学习笔记

1.1 Linux 开发环境搭建 由于仅是开发环境的搭建&#xff0c;所以只简单记述一下步骤 必备软件&#xff1a; Ubuntu 18.04 XShell-用于远程登录&#xff0c;使用SSH协议&#xff0c;TCP连接&#xff0c;端口号22 XFtp&#xff0c;本次实验中尚未用到 Visual studio code&a…

什么是蒙特卡洛学习,时序差分算法

在学习的过程中经常会看到蒙卡特洛和时序差分算法&#xff0c;到底这两个是指什么&#xff0c;今天稍微整理下&#xff0c;开始吧。蒙卡特洛1.1 蒙卡特洛方法蒙特卡罗方法又叫做统计模拟方法&#xff0c;它使用随机数(或伪随机数)来解决计算问题。比如上图&#xff0c;矩形的面…