以配置非自定义bean来演示bean的实例化方式

以配置非自定义bean来演示bean的实例化方式

一、以实例化非自定义bean--Date来演示bean的实例化--工厂实例化(非静态)

1.1原理

1.2具体步骤

applicationContext.xml:

java 复制代码
<!--    先是建立工厂-->
    <bean class="java.text.SimpleDateFormat" id="simpleDateFormat">
        <constructor-arg name="pattern" value="yyyy-MM-dd HH:mm:ss"/>
    </bean>
<!--    然后使用工厂进行实例化,调用工厂,和工厂方法实例化-->
    <bean class="java.util.Date" id="date" factory-bean="simpleDateFormat" factory-method="parse">
        <constructor-arg name="source" value="2020-05-05 09:09:09"/>
    </bean>

测试:

java 复制代码
package com.itheima.test;

import com.alibaba.druid.pool.DruidDataSource;
import com.itheima.dao.impl.UserDaoImpl;
import com.itheima.service.UserService;
import com.mysql.jdbc.Connection;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import javax.xml.bind.annotation.XmlAccessOrder;
import java.sql.DriverManager;

public class BeanFactoryTest {
    public static void main(String[] args) {
//        直接使用ApplicationContex来进行加载
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext_beanfac.xml");


//        先定义一个类,这类似于创建工厂
//        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM--dd HH:mm:ss");
////        然后是使用
//        Date date =simpleDateFormat.parse("2020-05-05 09:09:09");
        Object date = applicationContext.getBean("date");
        System.out.println(date);

    }
}

结果:

二、以实例化非自定义bean--SqlSessionFactory来演示bean的几种实例化方式

先降维吧,先不配置xml文件:

java 复制代码
//先加载xml文件
//        以输入流来接收(这实际上是相当于静态方法)
        InputStream in = Resources.getResourceAsStream("mybatis-cofig.xml");
////        再是创建构造器,无参构造
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
////        再是创建工厂
        SqlSessionFactory sqlSessionFactory = builder.build(in);

实际上配置bean大体上可以分为:构造函数配置和工厂方法,具体有可以分为有参和无参、静态工厂方法和非静态工厂方法,可以看我的另一篇博文,已经进行详细总结:https://blog.csdn.net/2301_80749359/article/details/155668108?fromshare=blogdetail&sharetype=blogdetail&sharerId=155668108&sharerefer=PC&sharesource=2301_80749359&sharefrom=from_link,下面直接上手:

2.1先做好实验准备

去mabatis官网下载官方文档,配好它的配置文件,然后自己写好相关信息即可。

jade 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

2.2具体步骤:

applicationContext.xml:

java 复制代码
<!--    工厂方式实例化:静态工厂方法-->
<!--    指定工厂、工厂方法-->
    <bean class="org.apache.ibatis.io.Resources" factory-method="getResourceAsStream" id="in">
<!--        需要参数-->
        <constructor-arg name="resource" value="mybatis-cofig.xml"/>
    </bean>
<!--构造方法实例化:无参构造-->
    <bean class="org.apache.ibatis.session.SqlSessionFactoryBuilder" id="builder"></bean>

<!--    工厂方式实例化:实例化工厂方法-->
<!--    指定工厂和工厂方法-->
    <bean id="sqlSessionFactory" class="org.apache.ibatis.session.SqlSessionFactory" factory-bean="builder" factory-method="build">
        <constructor-arg name="inputStream" ref="in"/>
    </bean>

测试:

java 复制代码
//获取bean:sqlSessionFactory
      SqlSessionFactory sqlSessionFactory = (SqlSessionFactory) applicationContext.getBean("sqlSessionFactory");
//      获取SqlSession
      SqlSession sqlSession = sqlSessionFactory.openSession();
      System.out.println(sqlSession);

结果:

相关推荐
lly20240629 分钟前
Bootstrap 警告框
开发语言
2601_949146531 小时前
C语言语音通知接口接入教程:如何使用C语言直接调用语音预警API
c语言·开发语言
曹牧1 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
KYGALYX1 小时前
服务异步通信
开发语言·后端·微服务·ruby
掘了1 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
zmzb01031 小时前
C++课后习题训练记录Day98
开发语言·c++
爬山算法2 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
kfyty7252 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎2 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
李少兄2 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea