目录

一:概述

二:代码演示

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相关推荐

  1. 零配置 之Spring基于Java类定义Bean配置元数据

    转载自  [第十二章]零配置 之 12.4 基于Java类定义Bean配置元数据 --跟我学spring3 12.4  基于Java类定义Bean配置元数据 12.4.1  概述 基于Java类定义B ...

  2. Spring-基于注解的配置[01定义Bean+扫描Bean]

    概述 使用注解定义Bean 扫描注解定义的Bean 使用步骤 扫描特定的类 resource-pattern 实例 include-filter exclude-filter过滤子元素的使用 支持多种 ...

  3. SSM框架笔记11:Spring常用配置与高级话题

    一.Spring常用配置 1.Bean的Scope 2.Spring EL和资源调用 3.Bean的初始化和销毁 4.Profile 5.事件(Application Event) 二.Spring高 ...

  4. 惊呆了,Spring中竟然有12种定义bean的方法

    前言 在庞大的 Java 技术体系中,Spring 有着举足轻重的地位,它给每位开发者带来了极大的便利和惊喜. 我们都知道 Spring 是创建和管理bean的工厂,它提供了多种方式定义 bean,能 ...

  5. 我该如何学习spring源码以及解析bean定义的注册

    如何学习spring源码 前言 本文属于spring源码解析的系列文章之一,文章主要是介绍如何学习spring的源码,希望能够最大限度的帮助到有需要的人.文章总体难度不大,但比较繁重,学习时一定要耐住 ...

  6. Spring中基于Java的配置@Configuration和@Bean用法

    spring中为了减少xml中配置,可以生命一个配置类(例如SpringConfig)来对bean进行配置. 一.首先,需要xml中进行少量的配置来启动Java配置: [java] view plai ...

  7. Spring学习(六)bean装配详解之 【通过注解装配 Bean】【基础配置方式】

    本文借鉴:Spring学习(特此感谢!) 通过注解装配 Bean 1.前言 优势 1.可以减少 XML 的配置,当配置项多的时候,XML配置过多会导致项目臃肿难以维护 2.功能更加强大,既能实现 XM ...

  8. Spring学习(五)bean装配详解之 【XML方式配置】

    本文借鉴:Spring学习(特此感谢!) 一.配置Bean的方式及选择 配置方式 在 XML 文件中显式配置 在 Java 的接口和类中实现配置 隐式 Bean 的发现机制和自动装配原则 方式选择的原 ...

  9. java spring配置类_spring 配置 Java配置类装配bean

    https://www.cnblogs.com/chenbenbuyi/p/8457700.html 自动化装配的确有很大的便利性,但是却并不能适用在所有的应用场景,比如需要装配的组件类不是由自己的应 ...

最新文章

  1. 【分享】2019张小龙微信公开课要点整理
  2. P1501 [国家集训队]Tree II
  3. MTK 驱动(76)---如何用adb控制MTKLogger
  4. SpringCloudConfig配置中心读取本地配置文件
  5. 找出满足要求的三位数
  6. 布局优化之ViewStub、Include、merge使用分析
  7. linux查看tongweb端口,东方通tongweb linux安装
  8. linux环境 下载Neo4j
  9. 第一行代码 第二版pdf及源码(分享)
  10. IOS 苹果手机 使用重力加速度,js web devicemotion,deviceorientation事件
  11. Win10怎么开启超级管理员administrator帐户
  12. appium自动注册完整脚本
  13. MySQL学习笔记(3)查询数据1
  14. mongodb-报错FailedToParse: Password must be URL Encoded for mongodb:// URL:
  15. TTMS剧院票务管理系统全网最全!!!不接受反驳
  16. 论文研读-多目标自适应memetic算法
  17. 基于知识图谱+机器学习,搭建风控模型的项目落地
  18. HEVC学习(五) —— 帧内预测系列之三
  19. 用经典的模拟退火算法求解30城市小规模的TSP问题
  20. 用 matplotlib 绘制 3D 时间序列动态图

热门文章

  1. 智能科技五大创新商业模式
  2. Andriod微信小程序自动化测试
  3. 阿里云视频点播相关代码
  4. 使用RNN模型构建人名分类器
  5. webworker应用场景_JavaScript 工作原理之七-Web Workers 分类及 5 个使用场景
  6. YOLOv1论文翻译
  7. 后端如何编写API文档给到前端?
  8. mysql 分离 实时读_MySQL深入利用Ameoba实现读写分离
  9. CSS3 animation动画,风车旋转、loading、人物走路动画案例
  10. React Native 移动开发入门与实战