Spring IOC(3)BeanDefintion(2)

BeanDefintion接口中的属性:
ConstructorArgumentValues:存储构造方法的参数值;
**isAbstract:**是否是抽象类;
resourceDescription:对文件的描述;
setParentName设置当前BeanDefintion的父BeanDefintion;

AbstractBeanDefinition
AbstractBeanDefinition是BeanDefintion的一个抽象子类;这个子类有三个子实现类‘
RootBeanDefinition,ChildBeanDefinition,GenericBeanDefinition
在spring2.5的时候只有RootBeanDefinition,和ChildBeanDefinition没有GenericBeanDefinition;
现在已经没用RootBeanDefinition和ChildBeanDefinition了;
ChildBeanDefinition与RootBeanDefinition的使用


AnnotationConfigApplicationContext applicationContext=new AnnotationConfigApplicationContext();
applicationContext.register(JavaConfig.class);
RootBeanDefinition rootBeanDefinition=new RootBeanDefinition();
rootBeanDefinition.getPropertyValues().add(“name”,“yd”);//设置属性name为yd
rootBeanDefinition.setScope(BeanDefinition.SCOPE_PROTOTYPE);//设置为原型对象

rootBeanDefinition.setBeanClass(User.class);
ChildBeanDefinition childBeanDefinition=new ChildBeanDefinition(“bs”);//这个构造方法传入了rootBeanDefinition为其父类
childBeanDefinition.setBeanClass(UserTwo.class);
applicationContext.registerBeanDefinition(“bs”,rootBeanDefinition);
applicationContext.registerBeanDefinition(“ch”,childBeanDefinition);
applicationContext.refresh();
UserTwo userTwo=applicationContext.getBean(UserTwo.class);


在这个方法中,我们获得的User与UserTwo并未写上Component注解;手动把User和UserTwo添加到BeanDefintionMap中,并且让ChildBeanDefinition继承RootBeanDefinition的属性,让User与UserTwo同时拥有name为yd的属性和当前对象为原型对象的属性; 可以把rootBeanDefinition设置为真实的BeanDefinition,也可以把BeanDefinition设置为完全的模板,直接设置成抽象的类; 直接把rootBeanDefinition.setBeanClass(User.class);替换成rootBeanDefinition.setAbstract(true);使得rootBeanDefinition作为模板被 childBeanDefinition继承;也就是在xml未出现之前为了方便配置而设计出来的抽象模板给其他类来设置配置;相对于现在的配置那是相当的麻烦。

RootBeanDefinition,ChildBeanDefinition的意义;
RootBeanDefinition-----一般作为父BeanDefintion出现,也可以作为真实BeanDefintion出现,但是不能作为子BeanDefintion出现;
1、RootBeanDefinition----会抛异常
2、RootBeanDefinition-----暂时不知道,后面说;

ChildBeanDefinition:必须要有一个构造方法来实现,必须作为子BeanDefinition,不能单独描述一个bean;
RootBeanDefinition:不能作为子RootBeanDefinition出现;
GenericBeanDefinition:可以完全替代ChildBeanDefinition的作用,也能作为父BeanDefinition,也能作为一个单独普通BeanDefinition去描述bean;但是不能完全替代RootBeanDefinition;在spring内部有merge(合并,暂时先放着)方法必须要用到rootBeanDefinition作为接收方法的返回类;合并的BeanDefinition是一个特别的BeanDefinition必须要rootBeanDefinition来接收;

所有在xml中定义的BeanDefinition都是GenericBeanDefinition;

GenericBeanDefinition的子类
AnnotatedGenericBeanDefinition,ScannedGenericBeanDefinition
ScannedGenericBeanDefinition几乎与GenericBeanDefinition相同;
ScannedGenericBeanDefinition:如果一个类加了@Component
AnnotatedGenericBeanDefinition:配置类@Configuration
this.reader = new AnnotatedBeanDefinitionReader(this);:解析配置类专属使用(有些特殊的功能来解析配置类),当然也能够解析普通的BeanDefinition,因为他具有GenericBeanDefinition的功能;
applicationContext.register(JavaConfig.class);的本质就是new一个AnnotatedGenericBeanDefinition;

RootBeanDefinition的子类
ConfigurationClassBeanDefinition

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值