org.springframework.beans.factory.support.RootBeanDefinition#setTargetType ( )源码实例Demo

下面列出了org.springframework.beans.factory.support.RootBeanDefinition#setTargetType ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

@Test
public void individualBeanWithFactoryBeanSupplierAndTargetType() {
	AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
	RootBeanDefinition bd = new RootBeanDefinition();
	bd.setInstanceSupplier(TypedFactoryBean::new);
	bd.setTargetType(ResolvableType.forClassWithGenerics(FactoryBean.class, String.class));
	bd.setLazyInit(true);
	context.registerBeanDefinition("fb", bd);
	context.refresh();

	assertEquals(String.class, context.getType("fb"));
	assertEquals(FactoryBean.class, context.getType("&fb"));
}
 
@Test
public void testGenericsBasedInjectionWithBeanDefinitionTargetResolvableType() {
	RootBeanDefinition bd1 = new RootBeanDefinition(GenericInterface2Bean.class);
	bd1.setTargetType(ResolvableType.forClassWithGenerics(GenericInterface2Bean.class, String.class));
	bf.registerBeanDefinition("bean1", bd1);
	RootBeanDefinition bd2 = new RootBeanDefinition(GenericInterface2Bean.class);
	bd2.setTargetType(ResolvableType.forClassWithGenerics(GenericInterface2Bean.class, Integer.class));
	bf.registerBeanDefinition("bean2", bd2);
	bf.registerBeanDefinition("bean3", new RootBeanDefinition(MultiGenericFieldInjection.class));

	assertEquals("bean1 a bean2 123", bf.getBean("bean3").toString());
	assertEquals(ResolvableType.forClassWithGenerics(GenericInterface2Bean.class, String.class), bd1.getResolvableType());
	assertEquals(ResolvableType.forClassWithGenerics(GenericInterface2Bean.class, Integer.class), bd2.getResolvableType());
}
 
@Test
public void individualBeanWithFactoryBeanSupplierAndTargetType() {
	AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
	RootBeanDefinition bd = new RootBeanDefinition();
	bd.setInstanceSupplier(TypedFactoryBean::new);
	bd.setTargetType(ResolvableType.forClassWithGenerics(FactoryBean.class, String.class));
	bd.setLazyInit(true);
	context.registerBeanDefinition("fb", bd);
	context.refresh();

	assertEquals(String.class, context.getType("fb"));
	assertEquals(FactoryBean.class, context.getType("&fb"));
}
 
@Test
public void testGenericsBasedInjectionWithBeanDefinitionTargetResolvableType() {
	RootBeanDefinition bd1 = new RootBeanDefinition(GenericInterface2Bean.class);
	bd1.setTargetType(ResolvableType.forClassWithGenerics(GenericInterface2Bean.class, String.class));
	bf.registerBeanDefinition("bean1", bd1);
	RootBeanDefinition bd2 = new RootBeanDefinition(GenericInterface2Bean.class);
	bd2.setTargetType(ResolvableType.forClassWithGenerics(GenericInterface2Bean.class, Integer.class));
	bf.registerBeanDefinition("bean2", bd2);
	bf.registerBeanDefinition("bean3", new RootBeanDefinition(MultiGenericFieldInjection.class));

	assertEquals("bean1 a bean2 123", bf.getBean("bean3").toString());
	assertEquals(ResolvableType.forClassWithGenerics(GenericInterface2Bean.class, String.class), bd1.getResolvableType());
	assertEquals(ResolvableType.forClassWithGenerics(GenericInterface2Bean.class, Integer.class), bd2.getResolvableType());
}
 
源代码5 项目: dapeng-soa   文件: DapengComponentScanRegistrar.java
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
    for(String name: registry.getBeanDefinitionNames()){
        BeanDefinition definition = registry.getBeanDefinition(name);
        if(definition instanceof AnnotatedBeanDefinition){
            AnnotationMetadata metadata = ((AnnotatedBeanDefinition) definition).getMetadata();
            if(metadata.hasAnnotation(DapengService.class.getName()) ||
                metadata.hasMetaAnnotation(DapengService.class.getName())){

                Map<String, Object> annotationAtts = metadata.getAnnotationAttributes(DapengService.class.getName());

                if (annotationAtts.containsKey("service")) {
                    char[] realServiceNameAsChars = ((Class)annotationAtts.get("service")).getSimpleName().toCharArray();
                    realServiceNameAsChars[0] += 32;
                    String realServiceName = String.valueOf(realServiceNameAsChars);
                    ConstructorArgumentValues paras = new ConstructorArgumentValues();
                    paras.addIndexedArgumentValue(0, new RuntimeBeanReference(realServiceName));
                    paras.addIndexedArgumentValue(1, realServiceName);

                    RootBeanDefinition serviceDef = new RootBeanDefinition(SoaProcessorFactory.class, paras, null);
                    serviceDef.setScope(BeanDefinition.SCOPE_SINGLETON);
                    serviceDef.setTargetType(SoaServiceDefinition.class);

                    registry.registerBeanDefinition(realServiceName + "-definition", serviceDef);
                }
            }
        }
    }
}
 
private void registerBeanDefinition(BeanDefinitionRegistry registry, String beanName, Class beanClass) {
    RootBeanDefinition beanDefinition =
            new RootBeanDefinition(beanClass);
    beanDefinition.setTargetType(beanClass);
    beanDefinition.setRole(BeanDefinition.ROLE_APPLICATION);
    registry.registerBeanDefinition(beanName, beanDefinition);
}