全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解Spring中bean实例化的三种方式

今天我想来说说如何通过xml配置来实例化bean,其实也很简单。

使用xml配置来实例化bean共分为三种方式,分别是普通构造方法创建、静态工厂创建、实例工厂创建,OK,那么接下来我们来分别看看这几种方式。

普通构造方法创建

这种创建方式使我们使用最多的一种创建方式,直接配置bean节点即可,比如我有一个User类,如下:

public class User {
  public void add() {
    System.out.println("add()---------");
  }
}

然后通过简单配置一个bean节点就可以获取实例了,如下:

<bean class="org.sang.User" id="user"/>

OK,我们通过如下代码进行一个简单的测试:

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    User user = (User) context.getBean("user");
    System.out.println(user);

运行输出结果如下:

静态工厂创建

除了通过普通的构造方法创建之外,我们也可以通过静态构造方法来创建一个bean的实例,假设我有一个类叫做User2,如下:

public class User2 {
  public void add() {
    System.out.println("add2()---------");
  }
}

我给它创建一个静态工厂,如下:

public class User2Factory {
  public static User2 getInstance() {
    return new User2();
  }
}

该工厂中有一个静态方法,该静态方法返回一个User2的实例,在Spring的配置文件中,我们看看如何生成User2的实例:

复制代码 代码如下:
<bean id="user2" class="org.sang.User2Factory" factory-method="getInstance"/>

还是bean节点,只是多了一个factory-method属性,该属性指明该类中的静态工厂方法名为getInstance,这样Spring框架就知道调用哪个方法来获取User2的实例了,测试代码如下:

@Test
  public void test2() {
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    User2 user = (User2) context.getBean("user2");
    user.add();
  }

测试结果如下:

值得强调的是,这种方法并不常用。

实例工厂创建

小伙伴们看了静态工厂创建bean实例肯定都觉得很麻烦,事实上还有比静态工厂更麻烦的写法,那就是通过实例工厂来创建bean实例。实例工厂,顾名思义,就是我们工厂中的方法不是静态的,比如说,我有一个实体类叫做User3,如下:

public class User3 {
  public void add() {
    System.out.println("add3()---------");
  }
}

然后我还有一个工厂方法,如下:

public class User3Factory {
  public User3 getUser3() {
    return new User3();
  }
}

小伙伴们看到,在User3Factory类中有一个getUser3的方法,该方法返回一个User3类的实例,但是该方法不是静态的,那么我们在Spring的配置文件中要进行怎样的配置才能获取User3的一个实例呢?如下:

<bean class="org.sang.User3Factory" id="user3Factory"/>
<bean id="user3" factory-bean="user3Factory" factory-method="getUser3"/>

第一个bean用来获取user3Factory的实例,第二个bean则根据User3Factory的实例,然后指定factory-method,通过getUser3方法来获取User3的实例。

测试代码如下:

  @Test
  public void test3() {
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    User3 user = (User3) context.getBean("user3");
    user.add();
  }

测试结果如下:

OK,以上就是bean实例化的三种方式,最最常用的是第一种。

本文案例GitHub地址https://github.com/lenve/JavaEETest/tree/master/Test28-Spring1

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# spring  # 实例化bean  # spring实例化bean过程  # bean的实例化  # Spring Bean实例化实现过程解析  # Spring实例化bean的方式代码详解  # Spring中实例化bean的四种方式详解  # Spring实例化bean的四种方式详解  # 的是  # 方法来  # 我有一个  # 三种  # 创建一个  # 配置文件  # 有一个  # 类中  # 小伙伴们  # 我还  # 看了  # 第一个  # 最多  # 中有  # 也很  # 可以通过  # 第二个  # 几种  # 使我  # 顾名思义 


相关文章: 道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  视频网站app制作软件,有什么好的视频聊天网站或者软件?  宁波免费建站如何选择可靠模板与平台?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  常州自助建站费用包含哪些项目?  Python文件管理规范_工程实践说明【指导】  焦点电影公司作品,电影焦点结局是什么?  如何通过建站之星自助学习解决操作问题?  C++中引用和指针有什么区别?(代码说明)  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  制作销售网站教学视频,销售网站有哪些?  如何在阿里云服务器自主搭建网站?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  如何在橙子建站中快速调整背景颜色?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  免费视频制作网站,更新又快又好的免费电影网站?  建站之星CMS五站合一模板配置与SEO优化指南  建站主机助手选型指南:2025年热门推荐与高效部署技巧  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  如何快速搭建高效WAP手机网站吸引移动用户?  如何通过VPS建站无需域名直接访问?  如何通过虚拟主机快速搭建个人网站?  nginx修改上传文件大小限制的方法  全景视频制作网站有哪些,全景图怎么做成网页?  再谈Python中的字符串与字符编码(推荐)  建站之星如何优化SEO以实现高效排名?  建站主机数据库如何配置才能提升网站性能?  如何登录建站主机?访问步骤全解析  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  网站制作网站,深圳做网站哪家比较好?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  如何用好域名打造高点击率的自主建站?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  深入理解Android中的xmlns:tools属性  网站制作费用多少钱,一个网站的运营,需要哪些费用?  北京专业网站制作设计师招聘,北京白云观官方网站?  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  C++用Dijkstra(迪杰斯特拉)算法求最短路径  建站之星如何实现PC+手机+微信网站五合一建站?  建站之星后台密码遗忘如何找回?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  如何在阿里云高效完成企业建站全流程?  如何选择高性价比服务器搭建个人网站?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  XML的“混合内容”是什么 怎么用DTD或XSD定义  深圳网站制作平台,深圳市做网站好的公司有哪些?  潮流网站制作头像软件下载,适合母子的网名有哪些? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。