Spring源码解读与设计详析:BeanFactory与FactoryBean

FactoryBean :

T getObject() throws Exception;//返回对象

 Class<?> getObjectType();//返回对象类型

boolean isSingleton(); //是否单例

这是一个接口会被一个对象实现,这个对象会被用在一个BeanFactory当中。 它本身就是一个工厂,如果一个bean实现了这个接口,它就会作为一个工厂用于公开一个对象。而不会直接作为一个被暴露bean的实例。

  1. FactoryBean在Spring框架中得到大量的应用。
  2. FactoryBean本身创建出来的对象并不是FactoryBean这个实例的本身。而是由这个(FactoryBean)工厂所创建出来的对象。他会在AOP中得到大量使用,比如(org.springframework.aop.framework.ProxyFactoryBean)。

BeanFactory:

String FACTORY_BEAN_PREFIX = "&";//需要返回本身

 Object getBean(String name)throws BeansException;//根据bean的名字,返回bean的对象 

<T> T getBean(String name,Class<T> requiredType) throws BeansException; //传送bean的名字,class的类型

<T> T getBean(Class<T> requiredType)throws BeansException;//根据类型返回类型的实例,前提这个实例必须在配置中。 

Object getBean(String name,Object ... args) throws BeansException;

boolean containsBean(String name);//是否包含给定名字的bean 

boolean isSingleton(String name)throws NoSuchBeanDefinitionException;//判断给定名字的bean是不是一个单例对象 

boolean isPrototype(String name)throws NosuchBeanDefinitionException;//是否是一个原型(和isSingleton互斥如果isSingleton是true,那么这个就是false)

boolean isTypeMatch(String name,Class<?> targetType)throws NosuchBeanDefinitionException;//判断传送name的bean对象,是否是targetType这个类型,是为true,不是为false

Class<?> getType(String name)throws NosuchBeanDefinitionException; //根据bean的名字,返回class type

String[] getAliases(String name); //返回给定bean名字的别名,别名可能有多个返回字符串数组

总结:

 BeanFactory它是整个Spring容器的根容器,它里面描述了在所有的子接口,或者子类当中对容器的一些处理原则和职责到底是什么,包括一些生命周期的方法的一些约定。FactoryBean它本身又存活在BeanFactory当中的,那么它本身也是一个工厂。这个工厂的作用是用于创建由FactoryBean所能创建出来的对象。那么在创建出来这个对象时候,这个对象的某一些方法前面或者是后面就可以额外执行一些操作来实现AOP。

更详细的文章:

https://www.cnblogs.com/redcool/p/6413461.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库设计中的范式主要是为了规范化数据,减少数据冗余和数据异常,提高数据的一致性和完整性。常见的范式有1NF、2NF、3NF、BCNF、4NF等。 1NF(第一范式):数据表中的列都是不可分割的原子数据项。即每个列都只能有一个值,不可再拆分。 例如,一个订单表中的订单编号、客户编号、订单日期、订单金额、商品编号、商品名称、商品数量等列都应该是不可分割的原子数据项。 2NF(第二范式):在1NF的基础上,非主键列对主键列具有完全依赖关系。即非主键列只与主键有关系,而不与其他非主键列有关系。 例如,一个订单详情表中的订单编号、商品编号、商品名称、商品单价、商品数量等列都应该与订单编号有关系,而不与商品名称列有关系,因为商品名称只与商品编号有关系。 3NF(第三范式):在2NF的基础上,消除非主键列之间的传递依赖关系。即非主键列之间不应该存在依赖关系,而是应该通过主键来关联。 例如,一个学生选课表中的学生编号、课程编号、课程名称、教师名称、教室名称等列都应该与学生编号和课程编号有关系,而不应该存在教师名称和教室名称之间的依赖关系。 BCNF(巴斯-科德范式):在3NF的基础上,消除主键列之间的依赖关系。即主键列之间不能存在依赖关系,否则应该拆分成多个表。 例如,一个学生选课表中的学生编号、课程编号、成绩等列都应该与学生编号和课程编号有关系,而不应该存在学生编号和成绩之间的依赖关系。 4NF(第四范式):在BCNF的基础上,消除多值依赖关系。即一个表中的某些列的值可能对应多个值,应该将其拆分成多个表。 例如,一个学生选课表中的学生编号、课程编号、成绩、评价等列都应该与学生编号和课程编号有关系,而不应该存在成绩和评价之间的多值依赖关系。应该将成绩和评价分别拆分成两个表,与学生编号和课程编号关联。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值