可以实现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. CButton控件

    1. CButton等控件一般有两种方式创建,一是在资源视图中添加,一是在代码中使用成员函数Create()进行动态创建.如果是第一种那么添加Button变量同样在资源视图中实现,右击Button控件 ...

  2. 学习fortran77基础语法

    Program ParamaterDefine Implicit None C FORTRAN变量名和关键字不区分大小写.但调用外部函数的话,需要在编译选项里指定 c 大小写等选项 因为链接器是区分大 ...

  3. 关于CSS的优先级,CSS优先级计算,多个class引用

    原则一: 继承不如指定 原则二: #id > .class > 标签选择符 原则三:越具体越强大 原则四:标签#id >#id ; 标签.class > .class CSS优 ...

  4. 5W2H+35问

    之前看到的一个非常好且全面的做事方法论.

  5. js 匿名函数 用法

    JS执行顺序为从上到下 先声明存储匿名函数的变量放在JS文件中 <script src="/Scripts/niming.js" type="text/javasc ...

  6. Win7 IIS 部署站点遇到的问题 如 HTTP 错误 404.XX

    HTTP 错误 404.2 - Not Found 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面. 解决办法:设置为允许-面相 =============== ...

  7. WEB上传大文件解决方案

    众所皆知,web上传大文件,一直是一个痛.上传文件大小限制,页面响应时间超时.这些都是web开发所必须直面的. 本文给出的解决方案是:前端实现数据流分片长传,后面接收完毕后合并文件的思路.下面贴出简易 ...

  8. 20169207 《Linux内核原理与分析》第十一周作业

    阅读学习教材「Linux内核设计与实现 (Linux Kernel Development)」第教材第17,19,20章. 在第17章设备与模块章节,关于设备驱动和设备管理,我们讨论四中内核成分. 1 ...

  9. 《ARM Cortex-M3权威指南》笔记(1)

    http://blog.csdn.net/roverx/article/details/6624859 第1章 介绍 一.ARM Cortex‐M3处理器初探 CM3处理器内核是单片机的中央处理单元( ...

  10. 13.1.DataGrid的增、删、改、查前台页面

    公共js: 前台页面: