spring bean实例化的三种方法

8 篇文章 0 订阅
订阅专栏
本文详细介绍了Spring框架中bean的四种实例化方式:构造方法实例化、静态工厂实例化、实例工厂实例化以及FactoryBean实例化。通过代码示例和运行结果分析,展示了每种方式的特点和应用场景,帮助读者深入理解Spring bean的实例化过程。
摘要由CSDN通过智能技术生成


昏黄色系的街道上,并没有太多的色彩,唯有这座支在废瓦堆旁的小摊,像仙人掌上的一朵红花,点亮了整片沙漠的活力。​


前言(代码结构)

在这里插入图片描述


一、构造方法实例化bean(实用)

1.代码:

BookDaoImpl类:

package com.hewen.dao.impl;

import com.hewen.dao.BookDao;

/**
 * @author heWen
 */
public class BookDaoImpl implements BookDao {

    /**无参构造器,创建对象时必须要用,在此处代码如果运行了,就代表创建对象时运行了此代码,对于构造器的理解看看example
     公共的和私有的都可以访问,    有无都可以  1.结论:实例化bean就是用构造方法来实例化对象**/
    public BookDaoImpl() {
        System.out.println("book dao 构造器 is running ....");
    }

    @Override
    public void save() {
        System.out.println("book dao save ...");
    }

}

BookDao接口:

package com.hewen.dao;

public interface BookDao {
    public void save();
}

AppForInstanceBook:

package com.hewen;

import com.hewen.dao.BookDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AppForInstanceBook {
    public static void main(String[] args) {

        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        BookDao bookDao = (BookDao) ctx.getBean("bookDao");

        bookDao.save();

    }
}

xml配置:
在这里插入图片描述

2.运行结果:

在这里插入图片描述

3.实例化说明:

构造方法实例化bean使用了无参构造器,可以省略无参构造器的书写。实例化bean就是用构造方法来实例化对象。


二、使用静态工厂实例化bean(了解)

1.代码

OrderDaoFactory类:

package com.hewen.factory;

import com.hewen.dao.OrderDao;
import com.hewen.dao.impl.OrderDaoImpl;

/**静态工厂创建对象
 * @author heWen*/
public class OrderDaoFactory {
    /**一个方法,返回OrderDao对象的方法*/
    public static OrderDao getOrderDao(){
        System.out.println("factory setup....");
        return new OrderDaoImpl();
    }
}

AppForInstanceOrder类:

package com.hewen;

import com.hewen.dao.OrderDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AppForInstanceOrder {
    public static void main(String[] args) {
        //通过静态工厂创建对象
//        OrderDao orderDao = OrderDaoFactory.getOrderDao();
//        orderDao.save();


        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        OrderDao orderDao = (OrderDao) ctx.getBean("orderDao");

        orderDao.save();

    }
}

xml配置:
在这里插入图片描述

2.运行结果:

在这里插入图片描述

3.实例化说明:

工厂模式可以实现解耦,用于生成实例对象,所有的方法必须是static。class必须是工厂类,factory-method后接工厂类中的创建对象的方法。


三、使用实例工厂实例化bean(了解)

1.代码:

UserDaoFactory类:

package com.hewen.factory;

import com.hewen.dao.UserDao;
import com.hewen.dao.impl.UserDaoImpl;

/**
 * @author heWen
 */ //实例工厂创建对象
public class UserDaoFactory {
    public UserDao getUserDao(){
        return new UserDaoImpl();
    }
}

AppForInstanceUser类:

package com.hewen;

import com.hewen.dao.UserDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AppForInstanceUser {
    public static void main(String[] args) {
//        //创建实例工厂对象
//        UserDaoFactory userDaoFactory = new UserDaoFactory();
//        //通过实例工厂对象创建对象
          //因为是非静态的,用工厂对象.方法  用工厂的对象调方法
//        UserDao userDao = userDaoFactory.getUserDao();
//        userDao.save();


        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        OrderDao orderDao = (UserDao) ctx.getBean("userDao");

        userDao.save();

    }
}

xml配置:
在这里插入图片描述

在这里插入图片描述

2.运行结果:

在这里插入图片描述

3.实例化说明:

比较与上一个,在UserDaoFactory类中使用了实例化的方法,先要把工厂的实例化对象造出来,再使用工厂类中的方法。


四、使用FactoryBean实例化bean(三改)(常用)

1.代码:

UserDaoFactoryBean类:

package com.hewen.factory;

import com.hewen.dao.UserDao;
import com.hewen.dao.impl.UserDaoImpl;
import org.springframework.beans.factory.FactoryBean;
//FactoryBean创建对象
/**FactoryBean<>,泛型中你想让它造什么对象,就填什么*/
public class UserDaoFactoryBean implements FactoryBean<UserDao> {
    /**代替原始实例工厂中创建对象的方法(UserDaoFactory中的方法)*/
    @Override
    public UserDao getObject() throws Exception {
        return new UserDaoImpl();
    }

    /**这个对象是什么类型的?就是UserDao类型,就直接放入UserDao的字节码即可*/
    @Override
    public Class<?> getObjectType() {
        return UserDao.class;
    }

}

AppForInstanceUser类:

package com.hewen;

import com.hewen.dao.UserDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AppForInstanceUser {
    public static void main(String[] args) {
//        //创建实例工厂对象
//        UserDaoFactory userDaoFactory = new UserDaoFactory();
//        //通过实例工厂对象创建对象
          //因为是非静态的,用工厂对象.方法  用工厂的对象调方法
//        UserDao userDao = userDaoFactory.getUserDao();
//        userDao.save();


        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        OrderDao orderDao = (UserDao) ctx.getBean("userDao");

        userDao.save();

    }
}

xml配置:
在这里插入图片描述

2.运行结果:

在这里插入图片描述

3.实例化说明:

在这里插入图片描述
在方法三中配置时出现了以上的问题,于是使用方法四实现FactoryBean<>接口。同时既然造出了对象,通过以下方法查看是否单例?
在这里插入图片描述
在这里插入图片描述
由结果可得是单例。在UserDaoFactoryBean类中重写isSingleton()方法可改为非单例。
在这里插入图片描述

Spring三种实例化Bean的方式
10-16
Spring三种实例化Bean的方式
springBean的实例化方式
Marion的博客
12-26 322
无参数构造 对于这种方式,注意Bean类中必须提供无参数构造。 创建bean类 package com.itcast.bean; public class Bean1 { public Bean1(){ System.out.println("bean1的无参构造"); } public void show(){ System.out....
Spring 支持多种方式来实例化 Bean,包括构造函数、静态和实例工厂方法、自动扫描、注解驱动的 Bean 定义以及通过 FactoryBean 和 @Lookup 方法的方式
最新发布
weixin_45428910的博客
09-16 448
Spring 支持多种方式来实例化 Bean,包括构造函数、静态和实例工厂方法、自动扫描、注解驱动的 Bean 定义以及通过 FactoryBean 和 @Lookup 方法的方式
Spring中的Bean实例化三种方式
qq_42137703的博客
09-15 1810
Spring中的Bean实例化三种方式 Bean的实例化方式有三种,分别为:默认无参的构造器实例化、静态工厂方法实例化、实例工厂方法实例化 创建一个User对象,什么都没有,只用来做测试 public class User { } 1. 默认无参的构造器实例化 编写配置文件bean.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/sche
Spring】—— bean如何实例化(四种方式)?
张修宇的博客
01-11 1471
bean用来定义Spring核心容器管理的对象。bean有四种方式实例化:构造方法实例化、静态工厂实例化、实例工厂实例化、FactoryBean实例化
Spring实例化Bean的三种方法
unber的博客
08-09 4052
在面向对象的程序中,要想调用某个类的成员方法,就需要先实例化该类的对象。
详解Springbean实例化三种方式
08-30
本文将详细探讨Springbean实例化三种主要方式:普通构造方法创建、静态工厂创建和实例工厂创建。 1. 普通构造方法创建: 这是最常见、最直观的方式,适用于大部分情况。在Spring配置文件中,我们通过`<bean>`...
Spring Bean实例化实现过程解析
08-25
在这个过程中,Spring 容器会自动调用 Bean1 的无参构造方法实例化 Bean1,这样我们就可以获取到 Bean1 实例。 2. 静态工厂方法实例化 静态工厂方法实例化是指通过静态工厂方法实例化 Bean。这意味着,我们...
浅谈springioc实例化bean的三个方法
08-29
Spring IOC实例化Bean有三种方法:构造器实例化、静态工厂方法实例化和实例工厂方法实例化。每种方法都有其优缺,选择哪种方法取决于实际需求。 在实际开发中,我们可以根据需要选择合适的实例化方法。例如,如果...
Spring bean对象实例化实现过程图解
08-18
Spring Bean 对象实例化实现过程图解...Spring Bean 对象实例化实现过程图解是一个复杂的过程,需要了解 BeanDefinitionRegistryPostProcessor 接口、BeanPostProcessor 的注册、getSingleton 方法、createBean 方法和 ...
Spring实例化Bean顺序
04-11
4. **启动后处理器(BeanPostProcessor)**:这些是特殊类型的Bean,它们在所有常规Bean实例化之后,但初始化之前进行处理。它们的实例化顺序由`@Order`注解决定,或者通过实现`Ordered`接口来控制。 5. **...
Spring 实例化Bean的三种方式
01-31
Spring 实例化Bean的三种方式
spring实例化bean的三种方式
chiperfect的专栏
07-29 1935
1.     使用构造方法实例化,最常用的   2.     使用静态工厂方法实例化   public static class MyServiceFactory {        public static MyService createBean() {
spring中有三中实例化bean的方式
上兵伐谋,其次伐交,其次伐兵,其下攻城
11-11 632
spring中有三中实例化bean的方式: 一、使用构造器实例化; 二、使用静态工厂方法实例化; 三、使用实例化工厂方法实例化。   每种实例化所采用的配置是不一样的: 一、使用构造器实例化; 这种实例化的方式可能在我们平时的开发中用到的是最多的,因为在xml文件中配置简单并且也不需要额外的工厂类来实现。   Xml代码  
Spring实例化Bean的三种方式
y_Reol的博客
05-18 395
Bean的实例化:是指Spring通过反射获取Bean的构造方法进行实例化的过程 Bean的初始化:是指Bean的属性赋值、执行初始化方法(init-method)的过程 1. 构造器实例化 它会根据默认无参构造方法实例化Bean,如果bean中没有默认无参构造函数,将会创建失败 public class UserDaoImpl implements UserDao { public void save(){ System.out.println("save running..."
spring实例化bean的方式
tempsitegoogle
04-23 97
spring实例化bean的方式:注入方式和springContextFactory.getBean(*); 注入又分为:注解方式和xml配置方式。
SpringBean实例化三种方式
fangyuta998的博客
04-23 186
1.构造方法实现Bean的实例化 //无参构造方法 package annotation; public class Monkey { private String monkeyName; public String getMonkeyName() { return monkeyName; } public void setMonkeyName(String monkeyNa...
Spring篇】Bean实例化的四种方式及应用案例
m0_64231944的博客
11-16 1704
创建一个工厂 Bean,该工厂可能需要一些外部条件。
深度解析:Spring Bean实例化全过程
- 初始化处理:Spring会调用Bean的初始化方法(如果有的话),并且应用实现了`BeanPostProcessor`接口的类,这些类可以拦截Bean实例化前后的方法调用,进行额外的处理。 4. 国际化(i18n) 在实例化Bean的过程中,...
写文章

热门文章

  • (maven报错)Failed to execute goal on project ...: Could not resolve dependencies for project ... 11614
  • Screeps 2922
  • Java自定义异常类 2493
  • spring bean实例化的三种方法 2282
  • AOP参数校验 1641

分类专栏

  • 项目学习 2篇
  • Neo4j文档学习笔记
  • 设计模式 4篇
  • Java小技巧 1篇
  • 前端
  • 报错集合 1篇
  • Screeps 1篇
  • 学习记录 21篇
  • maven 2篇
  • spring 8篇
  • 算法 17篇
  • 二叉树 1篇
  • 队列 1篇
  • 矩阵 1篇
  • 滑动窗口 1篇
  • 深度优先搜索 1篇
  • 字符串 5篇
  • 数组 1篇
  • 双指针 1篇
  • 蓝桥杯(学习) 5篇

最新评论

  • 罗马数字---蓝桥杯

    2301_77019806: 错了,map.gei could be null

  • 删除字符--蓝桥杯

    FTCLL: 你写错了,你这个只是刚好解决例子了而已

大家在看

  • [刊ESE-2区]Deep code comment generation with hybrid lexical and syntactical information June 2019
  • 玩转PyCharm:常用操作和快捷键 215
  • 我最常用的几个免费爬虫软件&插件,非常强大 1199
  • 个人信息窗口(二)
  • Weblogic漏洞复现 421

最新文章

  • AOP参数校验
  • 设计模式--装饰者模式
  • 设计模式--观察者模式
2023年1篇
2022年57篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开心比较堵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家步行街玻璃钢雕塑设计主题玻璃钢雕塑手工制作景区玻璃钢拍照雕塑白城商场美陈惠州透明玻璃钢雕塑定做深圳欧式人物玻璃钢雕塑多少钱户内玻璃钢雕塑玻璃钢仿铜孔子雕塑广东大型主题商场美陈市场报价广场标识玻璃钢雕塑生产淮南玻璃钢公仔人物雕塑饶阳人物玻璃钢雕塑户外玻璃钢人物雕塑生产太湖玻璃钢佛像雕塑萍乡多彩玻璃钢雕塑生产厂家山西定制玻璃钢雕塑多少钱福建玻璃钢花盆生产厂家玻璃钢雕塑作品欣赏杭州玻璃钢金属雕塑私人定做玻璃钢花盆用什么材料制室内玻璃钢商场美陈南京佛像玻璃钢雕塑一般多少钱临沧市玻璃钢雕塑设计怎么样玻璃钢消防人物雕塑大理市玻璃钢雕塑设计代理玻璃钢字母座椅雕塑厂许昌景观玻璃钢仿铜雕塑定做太湖玻璃钢蔬菜雕塑云浮玻璃钢动物雕塑批量定制芜湖户外玻璃钢雕塑价位香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化