zoukankan      html  css  js  c++  java
  • 【sping揭秘】4、某些无法注册到IOC容器的对象如何交给spring托管

    可以实现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就不用写什么配置文件了,这个倒是实实在在的好处。。。

  • 相关阅读:
    Flexbox
    jquery.cropper 裁剪图片上传
    让Sublime Text3支持Less
    css实现图片垂直居中
    手淘适配-flexible
    CSSREM
    vue.js+boostrap最佳实践
    最好用的技术是最基础的
    响应式网页布局
    php基础入门
  • 原文地址:https://www.cnblogs.com/cutter-point/p/8597717.html
Copyright © 2011-2022 走看看