Spring容器提供了三种对bean的实例化方式:

1)构造器实例化

public class Demo {
private String name;
//getter和setter方法略
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 构造器实例化 -->
<bean id="demo1" class="com.oak.junit.day01.Demo"></bean>
</beans>

测试:

@Test
public void testCtx() {
//实例化Spring容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");
//取出demo1
Demo demo1=ctx.getBean("demo1",Demo.class);
System.out.println(demo1);
}

2)静态工厂方法实例化

public class DemoBeanFactory {
//静态工厂方法-返回一个Demo实例
public static Demo staticDemoBean(){
return new Demo();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 构造器实例化 -->
<bean id="demo1" class="com.oak.junit.day01.Demo"></bean> <!-- 静态工厂实例化 class为工厂类 factory-method为静态工厂方法 -->
<bean id="demo2" class="com.oak.junit.day01.DemoBeanFactory"
factory-method="staticDemoBean"></bean>
</beans>

测试:

    @Test
public void testCtx() {
//实例化Spring容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");
//取出demo1
Demo demo1=ctx.getBean("demo1",Demo.class);
System.out.println(demo1); //取出demo2
Demo demo2=ctx.getBean("demo2",Demo.class);
System.out.println(demo2);
}

3)实例工厂方法是实例化

工厂类中加入实例工厂方法:

public class Demo {
private String name;
//getter和setter方法略
}
public class DemoBeanFactory {
//静态工厂方法-返回一个Demo实例
public static Demo staticDemoBean(){
return new Demo();
}
//实例工厂方法-返回一个Demo实例
public Demo constructorDemoBean(){
return new Demo();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 构造器实例化 -->
<bean id="demo1" class="com.oak.junit.day01.Demo"></bean> <!-- 静态工厂实例化 class为工厂类 factory-method为静态工厂方法 -->
<bean id="demo2" class="com.oak.junit.day01.DemoBeanFactory"
factory-method="staticDemoBean"></bean> <!-- 先实例化工厂类 -->
<bean id="demoBeanFactory" class="com.oak.junit.day01.DemoBeanFactory"></bean>
<!-- 实例工厂实例化 class为工厂类 factory-bean指定工厂类 factory-method为实例工厂方法 -->
<bean id="demo3" factory-bean="demoBeanFactory"
factory-method="constructorDemoBean"></bean>
</beans>

测试:

@Test
public void testCtx() {
//实例化Spring容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");
//取出demo1
Demo demo1=ctx.getBean("demo1",Demo.class);
System.out.println(demo1); //取出demo2
Demo demo2=ctx.getBean("demo2",Demo.class);
System.out.println(demo2); //取出demo2
Demo demo3=ctx.getBean("demo3",Demo.class);
System.out.println(demo3);
}

文章转载至:https://blog.csdn.net/qq_34598667/article/details/83246492

Spring:Spring-IOC实例化bean的常用三种方式的更多相关文章

  1. Spring学习(五)-----注入bean属性的三种方式( 1: 正常的方式 2: 快捷方式 3: “p” 模式)

    在Spring中,有三种方式注入值到 bean 属性. 正常的方式 快捷方式 “p” 模式 看到一个简单的Java类,它包含两个属性 - name 和 type.稍后将使用Spring注入值到这个 b ...

  2. 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比

    [原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...

  3. spring中创建bean对象的三种方式以及作用范围

    时间:2020/02/02 一.在spring的xml配置文件中创建bean对象的三种方式: 1.使用默认构造函数创建.在spring的配置文件中使用bean标签,配以id和class属性之后,且没有 ...

  4. Spring的依赖注入(DI)三种方式

    Spring依赖注入(DI)的三种方式,分别为: 1.  接口注入 2.  Setter方法注入 3.  构造方法注入 下面介绍一下这三种依赖注入在Spring中是怎么样实现的. 首先我们需要以下几个 ...

  5. Solon 开发,四、Bean 扫描的三种方式

    Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...

  6. 【Spring】Spring之向 IOC 容器注入对象的三种方式

    关于Spring的搭建可参见:浅析Spring框架的搭建.在测试之前还是应该先将环境配置好,将相关Jar包导进来.Spring创建的对象,默认情况下都是单例模式,除非通过scope指定. 向IOC容器 ...

  7. 【spring】 SpringMVC返回json数据的三种方式

    配置方法一 **1.导入第三方的jackson包,jackson-mapper-asl-1.9.7.jar和jackson-core-asl-1.9.7.jar. 2.spring配置文件添加** & ...

  8. Spring AOP编程(二)-AOP实现的三种方式

    AOP的实现有三种方式: l         aop底层将采用代理机制进行实现. l         接口 + 实现类 :spring采用 jdk 的动态代理Proxy. l         实现类: ...

  9. ios多线程开发的常用三种方式

    1.NSThread 2.NSOperationQueue 3.GCD NSThread: 创建方式主要有两种: [NSThread detachNewThreadSelector:@selector ...

随机推荐

  1. Python3.x 基础练习题100例(71-80)

    练习71: 题目: 编写input()和output()函数输入,输出5个学生的数据记录. 程序: N = 5 # stu # num : string # name : string # score ...

  2. 《Matlab实用案例》系列Matlab从入门到精通实用100例案例教程目录(持续更新)

    目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 2. 专栏地址 「 刘一哥与GIS的故事 」之<Matlab使用案例> 3. 专栏目录 [MATLAB统计分析与应用1 ...

  3. MongoDB(13)- 查询操作返回指定的字段

    插入测试数据 db.inventory.insertMany( [ { item: "journal", status: "A", size: { h: 14, ...

  4. 解决1字节的UTF-8序列的字节1无效问题

    学习路上碰到了这个异常 解决方法如下: 1.手动将< ? xml version="1.0" encoding="UTF-8"?>中的UTF-8更改 ...

  5. Python小白的数学建模课-05.0-1规划

    0-1 规划不仅是数模竞赛中的常见题型,也具有重要的现实意义. 双十一促销中网购平台要求二选一,就是互斥的决策问题,可以用 0-1规划建模. 小白学习 0-1 规划,首先要学会识别 0-1规划,学习将 ...

  6. LogMysqlApeT

    with LogMysqlApeT(db) as m_client: condition = "select * from {} where deleted=0 ".format( ...

  7. 端到端TVM编译器(下)

    端到端TVM编译器(下) 4.3 Tensorization DL工作负载具有很高的运算强度,通常可以分解为张量运算符,如矩阵乘法或一维卷积.这些自然分解导致了最近的添加张量计算原语.这些新的原语带来 ...

  8. CVPR2020论文解读:3D Object Detection三维目标检测

    CVPR2020论文解读:3D Object Detection三维目标检测 PV-RCNN:Point-Voxel Feature Se tAbstraction for 3D Object Det ...

  9. Yolov3&Yolov4网络结构与源码分析

    Yolov3&Yolov4网络结构与源码分析 从2018年Yolov3年提出的两年后,在原作者声名放弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗. 文章目录 1. 论 ...

  10. awr快照保留时间修改

    ==============  awr快照保留时间修改 ============= 1.查询当前awr报告保留时间 col SNAP_INTERVAL for a20col RETENTION for ...