当前位置: 首页 > news >正文

spring实例化对象的几种方式(使用XML配置文件)

前言    

    Spring框架作为一个轻量级的控制反转(IoC)容器,为开发者提供了多种对象实例化的策略。通过这些策略,开发者可以更加灵活地控制对象的生命周期和依赖关系。无论是通过XML配置、注解配置还是Java配置,Spring都能轻松地实现对象的实例化。本文将介绍Spring实例化对象的几种常见方式。

前面的例子都是无参构造实例化,所以这里就不再赘述。

有参构造实例化 

    先提供一个有参的构造方法:

    public UserService(String str){System.out.println("有参构造实例化对象"+str);}

然后在配置的xml文件使用constructor-arg添加参数,value为参数的值

    <bean id="text" class="com.cc.service.UserService" ><constructor-arg name="str" value="hhhhhh"/></bean>

注意name的值要与形参相同:

  

运行结果如图:


在有多个参数的情况下,还需要使用index属性来配置参数的值(如果name属性都配置了也可以不用index):

    public UserService(String str,int string){System.out.println("有参构造实例化对象"+str+","+string);}
    <bean id="text" class="com.cc.service.UserService" ><constructor-arg name="str" index="0" value=""/><constructor-arg name="string" index="1" value="188"/></bean>

工厂方式实例化对象 

静态工厂方式实例化对象

    静态工厂方式实例化对象是通过属性factory-method来指定一个静态方法,在该静态方法中达到创建对象的目标并返回交给spring容器管理。

<bean id="user" class="com.cc.entity.User" factory-method="createObj"></bean>
public class User {public static Person createObj() {return new Person();}
}
public class Main {public static void main(String[] args) {ClassPathXmlApplicationContext a = new ClassPathXmlApplicationContext("test.xml");Person user = (Person) a.getBean("user");System.out.println(user);}
}

    采用静态工厂的方式去实例化对象,只需要在bean标签中指定一个静态方法即可,用factory-method属性来指定,方面名自已取,反正由idea自动帮我们创建好。然后我们只需要在创建好的静态方法中返回一个对象就搞定了。  

实例工厂方式实例化对象

    实例工厂方式与静态工厂方式略有不同:

    静态工厂方式是一个静态方法,它直接通过类名调用,并返回一个新的bean实例;

    在xml配置文件中,使用<bean>标签定义bean实例,用factory-method属性指定静态工厂方法名称

    实例工厂方式是一个非静态方法,它需要在已经创建了工厂对象的基础上,通过工厂对象来调用。

    factory-bean指定已经创建好的工厂bean的id,再使用factory-method属性指定工厂方法的名称

    <bean id="user" class="com.cc.entity.User" ></bean><bean id="person" class="com.cc.entity.Person" factory-bean="user" factory-method="createObj"></bean>
public class User {public User createObj() {return new User();}
}
public class Main {public static void main(String[] args) {ClassPathXmlApplicationContext a = new ClassPathXmlApplicationContext("test.xml");Object bean = a.getBean("person");System.out.println(bean);}
}

实现FactoryBean方式

http://www.lryc.cn/news/504243.html

相关文章:

  • 【二叉树】力扣 129.求根节点到叶子节点数字之和
  • 深度学习物体检测之YOLOV5源码解读
  • 音频数据采样入门详解 - 给Python初学者的简单解释
  • Unity类银河战士恶魔城学习总结(P179 Enemy Archer 弓箭手)
  • SpringCloud集成sleuth和zipkin实现微服务链路追踪
  • Python随机抽取Excel数据并在处理后整合为一个文件
  • Linux+Docker onlyoffice 启用 HTTPS 端口支持
  • 在 Visual Studio Code 中编译、调试和执行 Makefile 工程 llama2.c
  • python中math模块常用函数
  • 优化 Vue 3 开发体验:配置 Vite 使用 WebStorm 作为 Vue DevTools 的默认编辑器
  • 【C语言练习(9)—有一个正整数,求是几位数然后逆序打印】
  • 热敏打印机的控制
  • 【closerAI ComfyUI】电商赋能,AI模特套图生产,各种姿势自定义,高度保持人物服饰场景一致性,摆拍街拍专用
  • ARM学习(36)静态扫描规则学习以及工具使用
  • 使用 Docker Compose 部署 Redis 主从与 Sentinel 高可用集群
  • 警惕!手动调整服务器时间可能引发的系统灾难
  • MySQL追梦旅途之性能优化
  • 【机器学习】【无监督学习——聚类】从零开始掌握聚类分析:探索数据背后的隐藏模式与应用实例
  • 基于深度Q网络(Deep Q-Network,DQN)的机器人路径规划,可以自定义地图,MATLAB代码
  • Python-从文件中读取数据-Sat-Sun
  • 测试工程师的职业规划
  • 使用 Puppeteer 快速上手 Node.js 爬虫
  • 浏览器的跨域问题与解决方案
  • MyBatis一二级缓存的区别?
  • [2024-12 CISCN 长城杯] Crypto
  • pytorch bilstm crf的教程,注意 这里不支持批处理,要支持批处理 用torchcrf这个。
  • Python毕业设计选题:基于django+vue的疫情数据可视化分析系统
  • tomcat被检测到目标URL存在htp host头攻击漏洞
  • 1.初识python
  • 【密码学】ZUC祖冲之算法