以配置非自定义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);

结果:

相关推荐
开心码农1号14 分钟前
Java rabbitMQ如何发送、消费消息、全套可靠方案
java·rabbitmq·java-rabbitmq
小村儿16 分钟前
连载04-最重要的Skill---一起吃透 Claude Code,告别 AI coding 迷茫
前端·后端·ai编程
EAIReport16 分钟前
国外网站数据批量采集技术实现路径
开发语言·python
超绝振刀怪17 分钟前
【C++可变模板参数】
开发语言·c++·可变模板参数
蜡台23 分钟前
JetBrains IDEA 安装 卸载相关总结
java·ide·intellij-idea·注册码
WJLSH12323 分钟前
TomCat
java·tomcat
Freak嵌入式28 分钟前
MicroPython LVGL基础知识和概念:时序与动态效果
开发语言·python·github·php·gui·lvgl·micropython
戮戮1 小时前
Spring Cloud Gateway 零拷贝参数校验:一种高性能网关架构实践
java·网络·架构·gateway
2501_933329551 小时前
企业媒体发布与舆情管理实战:Infoseek舆情系统技术架构与落地解析
大数据·开发语言·人工智能·数据库开发