春框架中的BeanFactory接口和FactoryBean接口因为名称相似,老是容易搞混淆,而且也是面试过程中经常会碰到的一个问题,所以本文就专门给大家整理出来。
BeanFactory接口是春容器的核心接口,负责:实例化,定位,配置应用程序中的对象及建立这些对象间的依赖。
春为我们提供了许多易用的BeanFactory实现,XmlBeanFactory就是常用的一个,该实现将以XML方式描述组成应用的对象及对象间的依赖关系.XmlBeanFactory类将持有此XML配置元数据,并用它来构建一个完全可配置的系统或应用。
BeanFactory男朋友=new XmlBeanFactory(新ClassPathResource("中")); 对象bean=bf.getBean (IUserService.class); System.out.println (bean);
接口中定义的方法
公共接口BeanFactory { 字符串FACTORY_BEAN_PREFIX="和"; 对象getBean(字符串名称)BeansException扔; & lt; T>T getBean(字符串名称,ClassrequiredType)抛出BeansException; 对象getBean(字符串名称、对象……args)抛出BeansException; & lt; T>T getBean (Class requiredType)抛出BeansException; & lt; T>T getBean (Class requiredType,对象……args)抛出BeansException; 布尔containsBean(字符串名称); 布尔isSingleton抛出NoSuchBeanDefinitionException(字符串名称); 布尔isPrototype抛出NoSuchBeanDefinitionException(字符串名称); 布尔isTypeMatch(字符串名称,ResolvableType typeToMatch) NoSuchBeanDefinitionException扔; 布尔isTypeMatch(字符串名称,Class<& # 63;比;typeToMatch)抛出NoSuchBeanDefinitionException; Class<& # 63;比;方法抛出NoSuchBeanDefinitionException(字符串名称); String [] getAliases(字符串名称); }
BeanFactory接口是春天的核心接口。功能非常复杂,这个时候如果我们想要编写一些比较复杂点儿的逻辑就会触及到其他一些不必要的接口,不好实现。这时候使用FactoryBean就比较方便了.FactoryBean以Bean结尾是个Bean对象,不是工厂。接口中定义的方法如下:
公共接口FactoryBean{/* * *返回对象的实例 */T getObject()抛出异常;/* * *返回对象的类型 */Class<& # 63;比;getObjectType ();/* * *是否是单例 */布尔isSingleton (); }
<强> 1。简单实现强>
接口和实现类
公共接口IUserService { 公共空间doSome (); }
公共类UserServiceImpl实现IUserService { 公共UserServiceImpl () { System.out.println(”——被实例化了——”); } @Override 公共空间doSome () { system . out。println (“UserServiceImpl…被执行了”); } }
自定义FactoryBean
公共类MyFactoryBean实现FactoryBean配置文件
& lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比; & lt;豆类xmlns=" http://www.springframework.org/schema/beans " xmlns: xsi=" http://www.w3.org/2001/XMLSchema-instance " xsi: schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd”比; & lt; bean id=癿yFactoryBean”类=癱om.dpb.factorybean.MyFactoryBean”/比; & lt;/beans>测试,通过类型获取
@Test 公共空间test1 () { BeanFactory男朋友=new XmlBeanFactory(新ClassPathResource("中")); 对象bean=bf.getBean (IUserService.class); System.out.println (bean); }春天中BeanFactory与FactoryBean接口的区别详解