Spring之配置非自定义Bean
目录
一:概述
二:代码演示
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 configurationPUBLIC "-//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
Spring之配置非自定义Bean相关推荐
- 零配置 之Spring基于Java类定义Bean配置元数据
转载自 [第十二章]零配置 之 12.4 基于Java类定义Bean配置元数据 --跟我学spring3 12.4 基于Java类定义Bean配置元数据 12.4.1 概述 基于Java类定义B ...
- Spring-基于注解的配置[01定义Bean+扫描Bean]
概述 使用注解定义Bean 扫描注解定义的Bean 使用步骤 扫描特定的类 resource-pattern 实例 include-filter exclude-filter过滤子元素的使用 支持多种 ...
- SSM框架笔记11:Spring常用配置与高级话题
一.Spring常用配置 1.Bean的Scope 2.Spring EL和资源调用 3.Bean的初始化和销毁 4.Profile 5.事件(Application Event) 二.Spring高 ...
- 惊呆了,Spring中竟然有12种定义bean的方法
前言 在庞大的 Java 技术体系中,Spring 有着举足轻重的地位,它给每位开发者带来了极大的便利和惊喜. 我们都知道 Spring 是创建和管理bean的工厂,它提供了多种方式定义 bean,能 ...
- 我该如何学习spring源码以及解析bean定义的注册
如何学习spring源码 前言 本文属于spring源码解析的系列文章之一,文章主要是介绍如何学习spring的源码,希望能够最大限度的帮助到有需要的人.文章总体难度不大,但比较繁重,学习时一定要耐住 ...
- Spring中基于Java的配置@Configuration和@Bean用法
spring中为了减少xml中配置,可以生命一个配置类(例如SpringConfig)来对bean进行配置. 一.首先,需要xml中进行少量的配置来启动Java配置: [java] view plai ...
- Spring学习(六)bean装配详解之 【通过注解装配 Bean】【基础配置方式】
本文借鉴:Spring学习(特此感谢!) 通过注解装配 Bean 1.前言 优势 1.可以减少 XML 的配置,当配置项多的时候,XML配置过多会导致项目臃肿难以维护 2.功能更加强大,既能实现 XM ...
- Spring学习(五)bean装配详解之 【XML方式配置】
本文借鉴:Spring学习(特此感谢!) 一.配置Bean的方式及选择 配置方式 在 XML 文件中显式配置 在 Java 的接口和类中实现配置 隐式 Bean 的发现机制和自动装配原则 方式选择的原 ...
- java spring配置类_spring 配置 Java配置类装配bean
https://www.cnblogs.com/chenbenbuyi/p/8457700.html 自动化装配的确有很大的便利性,但是却并不能适用在所有的应用场景,比如需要装配的组件类不是由自己的应 ...
最新文章
- 【分享】2019张小龙微信公开课要点整理
- P1501 [国家集训队]Tree II
- MTK 驱动(76)---如何用adb控制MTKLogger
- SpringCloudConfig配置中心读取本地配置文件
- 找出满足要求的三位数
- 布局优化之ViewStub、Include、merge使用分析
- linux查看tongweb端口,东方通tongweb linux安装
- linux环境 下载Neo4j
- 第一行代码 第二版pdf及源码(分享)
- IOS 苹果手机 使用重力加速度,js web devicemotion,deviceorientation事件
- Win10怎么开启超级管理员administrator帐户
- appium自动注册完整脚本
- MySQL学习笔记(3)查询数据1
- mongodb-报错FailedToParse: Password must be URL Encoded for mongodb:// URL:
- TTMS剧院票务管理系统全网最全!!!不接受反驳
- 论文研读-多目标自适应memetic算法
- 基于知识图谱+机器学习,搭建风控模型的项目落地
- HEVC学习(五) —— 帧内预测系列之三
- 用经典的模拟退火算法求解30城市小规模的TSP问题
- 用 matplotlib 绘制 3D 时间序列动态图