码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-03-18 22:29:12      阅读:461      评论:0      收藏:0      [点我收藏+]

标签:ide   oid   getname   ret   bean   getbean   work   bsp   对象   

 

可以实现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托管

标签:ide   oid   getname   ret   bean   getbean   work   bsp   对象   

原文地址:https://www.cnblogs.com/cutter-point/p/8597717.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!