可以实现spring的factoryBean 接口,这样可以加入spring的IOC容器

比如现在有一个类叫MyObject,我们没有这个对象的源码,无法对这个对象进行操作,那么我们如何加入spring的配置呢?

package cn.cutter.start.bean;

import org.springframework.beans.factory.FactoryBean;
import org.springframework.stereotype.Component; @Component
public class NextDayDateFactoryBean implements FactoryBean { private int count = 0; @Override
public Object getObject() throws Exception {
MyObject mo = new MyObject();
mo.setName("num:" + count++);
return mo;
} @Override
public Class getObjectType() { return MyObject.class; } @Override
public boolean isSingleton() {
return false;
}
}

我们实现了factorybean接口,实现里面三个接口,然后我们给自己写的这个factory类添加注解,交给spring托管

到现在为止,好像没什么特别的地方,但是接下来,注意了!!

写一个测试 类

@Test
public void test3() {
//测试spring的IOC容器中,默认是保持在IOC容器中只有一个实例
ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:application-bean.xml");
//使用spring的factorybean
//这里注意了,我们返回的对象不是NextDayDateFactoryBean,而是MyObject,很关键 !!!!
MyObject mo1 = (MyObject) ctx.getBean("nextDayDateFactoryBean");
System.out.println("mo name is:" + mo1.getName());
MyObject mo2 = (MyObject) ctx.getBean("nextDayDateFactoryBean");
System.out.println("mo name is:" + mo2.getName());
MyObject mo3 = (MyObject) ctx.getBean("nextDayDateFactoryBean");
System.out.println("mo name is:" + mo3.getName());
MyObject mo4 = (MyObject) ctx.getBean("nextDayDateFactoryBean");
System.out.println("mo name is:" + mo4.getName()); }

你们猜这个结果会怎么样???

看到了没,我们使用factory对第三方的对象实现了控制!!!!

关键点在这里。。。。

不过说实话哈,感觉作用不是很大,我们也可以通过配置的方式直接配到spring容器中

这样不也可以加入spring配置中了吗???

当然用factorybean就不用写什么配置文件了,这个倒是实实在在的好处。。。

【sping揭秘】4、某些无法注册到IOC容器的对象如何交给spring托管的更多相关文章

  1. Spring源码之IOC容器创建、BeanDefinition加载和注册和IOC容器依赖注入

    总结 在SpringApplication#createApplicationContext()执行时创建IOC容器,默认DefaultListableBeanFactory 在AbstractApp ...

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

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

  3. @PostConstruct - 静态方法调用IOC容器Bean对象

    需求:工具类里面引用IOC容器Bean,强迫症患者在调用工具类时喜欢用静态方法的方式而非注入的方式去调用,但是spring 不支持注解注入静态成员变量. 静态变量/类变量不是对象的属性,而是一个类的属 ...

  4. 最简单的ioc容器代码(低仿Spring )

    Spring 的一大核心就是IOC,控制反转(依赖注入). 对象交由容器去控制,降低耦合性. Spring 的ioc实现原理其实很简单,容器启动后读取并解析配置文件,根据配置文件中<bean&g ...

  5. spring-从普通java类取得注入spring Ioc容器的对象的方案

    1.启动服务时通过spring容器的监听器(继承ContextLoaderListener 监听器的方法) public class ListenerSpringContext extends Con ...

  6. 手把手教你调试SpringBoot启动 IoC容器初始化源码,spring如何解决循环依赖

    授人以鱼不如授人以渔,首先声明这篇文章并没有过多的总结和结论,主要内容是教大家如何一步一步自己手动debug调试源码,然后总结spring如何解决的循环依赖,最后,操作很简单,有手就行. 本次调试 是 ...

  7. 【spring源码学习】spring的IOC容器之自定义xml配置标签扩展namspaceHandler向IOC容器中注册bean

    [spring以及第三方jar的案例]在spring中的aop相关配置的标签,线程池相关配置的标签,都是基于该种方式实现的.包括dubbo的配置标签都是基于该方式实现的.[一]原理 ===>sp ...

  8. Spring IoC容器初始化过程学习

    IoC容器是什么?IoC文英全称Inversion of Control,即控制反转,我么可以这么理解IoC容器: 把某些业务对象的的控制权交给一个平台或者框架来同一管理,这个同一管理的平台可以称为I ...

  9. [IoC容器Unity]第四回:使用范例

    1.引言 前面几个章节介绍了Unity的基本使用,主要分为程序和配置文件两种方法的使用,可以参考一下链接, [IoC容器Unity]第一回:Unity预览 [IoC容器Unity]第二回:Lifeti ...

随机推荐

  1. python3.4读取excel数据绘图

    #!/usr/bin/env python # -*- coding:utf-8 -*- # __author__ = "blzhu" """ pyt ...

  2. Keras人工神经网络多分类(SGD)

    import numpy as np import pandas as pd from keras.models import Sequential from keras.layers import ...

  3. C(m,n)算法

    排列组合:C(m,n),m为给定数列,n为要从数列m中取元素的数量,GetResult()获取所有不重复的组合. public class MathCombination<T> { Lis ...

  4. (01背包 第k优解) Bone Collector II(hdu 2639)

    http://acm.hdu.edu.cn/showproblem.php?pid=2639       Problem Description The title of this problem i ...

  5. noip第6课作业

    1.    数据统计 [问题描述] 输入N个整数,求出它们的最小值.最大值和平均值(保留3位小数).输入保证这些数都是不超过1000的整数.(1<=N<=1000) [样例输入] 8 2 ...

  6. 第74讲:从Spark源码的角度思考Scala中的模式匹配

    今天跟随王老师学习了从源码角度去分析scala中的模式匹配的功能.让我们看看源码中的这一段模式匹配: 从代码中我们可以看到,case RegisterWorker(id,workerHost,.... ...

  7. [kuangbin]树链剖分 D - 染色

    https://vjudge.net/contest/251031#problem/Dhttps://blog.csdn.net/kirito_acmer/article/details/512019 ...

  8. linux中的amount的解释

    挂载(amount)概念简述: 根文件系统之外的其他文件要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”,此目录即为“挂载点”,解除此关联关系的过程称之为“卸载 ...

  9. spring中的两个数据库事务DataSourceTransactionManager 和 JtaTransactionManager区别

    在spring与数据框架(mybatis或hibernate)容器的配置文件中通常会有 <!-- (事务管理)transaction manager, use JtaTransactionMan ...

  10. E - Evaluate Matrix Sum

    Description Given a matrix, the elements of which are all integer number from 0 to 50, you are requi ...