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