• Spring(四)- Spring配置非自定义Bean


    一、Spring的getBean方法

    在这里插入图片描述

    // 根据beanName获取容器中的Bean实例,需要手动强转
    UserService userService = (UserService) applicationContext.getBean("userService");
    // 根据Bean类型去容器中匹配对应的Bean实例,如存在多个匹配Bean则报错
    UserService userService2 = applicationContext.getBean(UserService.class);
    // 根据beanName获取容器中的Bean实例,指定Bean的Type类型
    UserService userService3 = applicationContext.getBean("userService", UserService.class);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    二、Spring配置非自定义Bean

    以上在 xml 中配置的Bean都是自己定义的,例如:UserDaoImpl,UserServiceImpl。但是,在实际开发中有些功能类并不是我们自己定义的,而是使用的第三方jar包中的,那么,这些Bean要想让Spring进行管理,也需要对其进行配置
    配置非自定义的Bean需要考虑如下两个问题:
    ⚫ 被配置的Bean的实例化方式是什么?无参构造、有参构造、静态工厂方式还是实例工厂方式;
    ⚫ 被配置的Bean是否需要注入必要属性。

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

    导入Druid坐标

     
    <dependency> 
    	<groupId>mysqlgroupId> 
    	<artifactId>mysql-connector-javaartifactId> 
    	<version>5.1.49version>
    dependency>
     
    <dependency> 
    	<groupId>com.alibabagroupId> 
    	<artifactId>druidartifactId> 
    	<version>1.1.23version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    分析:DruidDataSource可以通过无参构造方式实例化,并且还需要注入常用4个属性,所以用代码的形式创建bean如下:

    DruidDataSource druidDataSource = new DruidDataSource();
    druidDataSource.setDriverClassName("com.mysql.jdbc.Driver");
    druidDataSource.setUrl("jdbc://localhost:3306/mybatis");
    druidDataSource.setUsername("root");
    druidDataSource.setPassword("root");
    
    • 1
    • 2
    • 3
    • 4
    • 5

    但是想让spring创建bean,并存入容器中管理,需要配置如下:

     
    <bean class="com.alibaba.druid.pool.DruidDataSource">
    	 
    	<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    	<property name="url" value="jdbc://localhost:3306/mybatis"/>
    	<property name="username" value="root"/>
    	<property name="password" value="root"/>
    bean>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2. 配置Connection交由Spring管理

    分析:通过Class的静态方法forName可以创建一个Driver对象,如:Class clazz = Class.forName(“com.mysql.jdbc.Driver”);
    通过DriverManager的静态方法getConnection可以创建Connection对象,如:Connection connection = DriverManager.getConnection(“jdbc:mysql://mybatis”, “root”, “root”);
    所以可以通过静态工厂方式配置,交给Spring管理

    <bean id="clazz" class="java.lang.Class" factory-method="forName"> 
    	
    	<constructor-arg name="className" value="com.mysql.jdbc.Driver"/>
    bean> 
    
    
    <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="root"/>
    bean>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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

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

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

    可以看成是实例工厂方式,使用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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

    导入MyBatis的相关坐标:

     
    <dependency> 
    	<groupId>org.mybatisgroupId> 
    	<artifactId>mybatisartifactId> 
    	<version>3.5.5version>
    dependency>
     
    <dependency> 
    <groupId>mysqlgroupId> 
    	<artifactId>mysql-connector-javaartifactId> 
    	<version>5.1.49version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    MyBatis原始获得SqlSessionFactory的方式:

    // 加载mybatis核心配置文件,使用Spring静态工厂方式
    InputStream in = Resources.getResourceAsStream("mybatis-conifg.xml");
    // 创建SqlSessionFactoryBuilder对象,使用Spring无参构造方式
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    // 调用SqlSessionFactoryBuilder的build方法,使用Spring实例工厂方式
    SqlSessionFactory sqlSessionFactory = builder.build(in);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    SqlSessionFactory交由Spring管理配置如下:

     
    
    <bean id=“inputStream” class=“org.apache.ibatis.io.Resources” factory-method=“getResourceAsStream”> 
    
    	<constructor-arg name="resource" value="mybatis-config.xml"/>
    bean>
     
    <bean id="sqlSessionFactoryBuilder" class="org.apache.ibatis.session.SqlSessionFactoryBuilder"/>
     
    
    <bean id="sqlSessionFactory" factory-bean="sqlSessionFactoryBuilder" factory-method="build"> 
    
    	<constructor-arg name="inputStream" ref="inputStream"/>
    bean>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    十年回望,中国物联网平台消亡史
    RFID智能锁控系统在物流安全运输中的应用与效益分析
    Conditional DETR(ICCV 21)
    字符编码详解
    java高校教师个人信息管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
    Python学习笔记——文件操作、异常捕获、模块
    小程序源码:王者战力查询,游戏扫码登录,王者巅峰信息查询等等支持流量主收益和CPS收益-多玩法安装简单
    C语言变量定义选择题
    dubbo和springcloud问题解决——interface not allow null
    笔记 | 排序算法实现(Python)
  • 原文地址:https://blog.csdn.net/qq_36602071/article/details/127679044