类org.springframework.beans.factory.support.ChildBeanDefinition源码实例Demo

下面列出了怎么用org.springframework.beans.factory.support.ChildBeanDefinition的API类实例代码及写法,或者点击链接到github查看源代码。

@Test
public void testCanReferenceParentBeanFromChildViaAlias() {
	final String EXPECTED_NAME = "Juergen";
	final int EXPECTED_AGE = 41;

	RootBeanDefinition parentDefinition = new RootBeanDefinition(TestBean.class);
	parentDefinition.setAbstract(true);
	parentDefinition.getPropertyValues().add("name", EXPECTED_NAME);
	parentDefinition.getPropertyValues().add("age", EXPECTED_AGE);

	ChildBeanDefinition childDefinition = new ChildBeanDefinition("alias");

	DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
	factory.registerBeanDefinition("parent", parentDefinition);
	factory.registerBeanDefinition("child", childDefinition);
	factory.registerAlias("parent", "alias");

	TestBean child = (TestBean) factory.getBean("child");
	assertEquals(EXPECTED_NAME, child.getName());
	assertEquals(EXPECTED_AGE, child.getAge());

	assertEquals("Use cached merged bean definition",
			factory.getMergedBeanDefinition("child"), factory.getMergedBeanDefinition("child"));
}
 
@Test
public void testCanReferenceParentBeanFromChildViaAlias() {
	final String EXPECTED_NAME = "Juergen";
	final int EXPECTED_AGE = 41;

	RootBeanDefinition parentDefinition = new RootBeanDefinition(TestBean.class);
	parentDefinition.setAbstract(true);
	parentDefinition.getPropertyValues().add("name", EXPECTED_NAME);
	parentDefinition.getPropertyValues().add("age", EXPECTED_AGE);

	ChildBeanDefinition childDefinition = new ChildBeanDefinition("alias");

	DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
	factory.registerBeanDefinition("parent", parentDefinition);
	factory.registerBeanDefinition("child", childDefinition);
	factory.registerAlias("parent", "alias");

	TestBean child = (TestBean) factory.getBean("child");
	assertEquals(EXPECTED_NAME, child.getName());
	assertEquals(EXPECTED_AGE, child.getAge());

	assertEquals("Use cached merged bean definition",
			factory.getMergedBeanDefinition("child"), factory.getMergedBeanDefinition("child"));
}
 
@Test
public void testCanReferenceParentBeanFromChildViaAlias() {
	final String EXPECTED_NAME = "Juergen";
	final int EXPECTED_AGE = 41;

	RootBeanDefinition parentDefinition = new RootBeanDefinition(TestBean.class);
	parentDefinition.setAbstract(true);
	parentDefinition.getPropertyValues().add("name", EXPECTED_NAME);
	parentDefinition.getPropertyValues().add("age", EXPECTED_AGE);

	ChildBeanDefinition childDefinition = new ChildBeanDefinition("alias");

	DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
	factory.registerBeanDefinition("parent", parentDefinition);
	factory.registerBeanDefinition("child", childDefinition);
	factory.registerAlias("parent", "alias");

	TestBean child = (TestBean) factory.getBean("child");
	assertEquals(EXPECTED_NAME, child.getName());
	assertEquals(EXPECTED_AGE, child.getAge());

	assertEquals("Use cached merged bean definition",
			factory.getMergedBeanDefinition("child"), factory.getMergedBeanDefinition("child"));
}
 
/**
 * Tests whether a bean definition without a specified bean class is handled correctly.
 */
@Test
public void postProcessorIntrospectsInheritedDefinitionsCorrectly() {
	beanFactory.registerBeanDefinition("config", new RootBeanDefinition(SingletonBeanConfig.class));
	beanFactory.registerBeanDefinition("parent", new RootBeanDefinition(TestBean.class));
	beanFactory.registerBeanDefinition("child", new ChildBeanDefinition("parent"));
	ConfigurationClassPostProcessor pp = new ConfigurationClassPostProcessor();
	pp.postProcessBeanFactory(beanFactory);
	Foo foo = beanFactory.getBean("foo", Foo.class);
	Bar bar = beanFactory.getBean("bar", Bar.class);
	assertSame(foo, bar.foo);
}
 
@Test
public void testGetTypeWorksAfterParentChildMerging() {
	RootBeanDefinition parentDefinition = new RootBeanDefinition(TestBean.class);
	ChildBeanDefinition childDefinition = new ChildBeanDefinition("parent", DerivedTestBean.class, null, null);

	DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
	factory.registerBeanDefinition("parent", parentDefinition);
	factory.registerBeanDefinition("child", childDefinition);
	factory.freezeConfiguration();

	assertEquals(TestBean.class, factory.getType("parent"));
	assertEquals(DerivedTestBean.class, factory.getType("child"));
}
 
@Test
public void testScopeInheritanceForChildBeanDefinitions() {
	RootBeanDefinition parent = new RootBeanDefinition();
	parent.setScope("bonanza!");

	AbstractBeanDefinition child = new ChildBeanDefinition("parent");
	child.setBeanClass(TestBean.class);

	DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
	factory.registerBeanDefinition("parent", parent);
	factory.registerBeanDefinition("child", child);

	BeanDefinition def = factory.getMergedBeanDefinition("child");
	assertEquals("Child 'scope' not inherited", "bonanza!", def.getScope());
}
 
/**
 * Tests whether a bean definition without a specified bean class is handled
 * correctly.
 */
@Test
public void postProcessorIntrospectsInheritedDefinitionsCorrectly() {
	beanFactory.registerBeanDefinition("config", new RootBeanDefinition(SingletonBeanConfig.class));
	beanFactory.registerBeanDefinition("parent", new RootBeanDefinition(TestBean.class));
	beanFactory.registerBeanDefinition("child", new ChildBeanDefinition("parent"));
	ConfigurationClassPostProcessor pp = new ConfigurationClassPostProcessor();
	pp.postProcessBeanFactory(beanFactory);
	Foo foo = beanFactory.getBean("foo", Foo.class);
	Bar bar = beanFactory.getBean("bar", Bar.class);
	assertSame(foo, bar.foo);
}
 
@Test
public void testGetTypeWorksAfterParentChildMerging() {
	RootBeanDefinition parentDefinition = new RootBeanDefinition(TestBean.class);
	ChildBeanDefinition childDefinition = new ChildBeanDefinition("parent", DerivedTestBean.class, null, null);

	DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
	factory.registerBeanDefinition("parent", parentDefinition);
	factory.registerBeanDefinition("child", childDefinition);
	factory.freezeConfiguration();

	assertEquals(TestBean.class, factory.getType("parent"));
	assertEquals(DerivedTestBean.class, factory.getType("child"));
}
 
@Test
public void testScopeInheritanceForChildBeanDefinitions() {
	RootBeanDefinition parent = new RootBeanDefinition();
	parent.setScope("bonanza!");

	AbstractBeanDefinition child = new ChildBeanDefinition("parent");
	child.setBeanClass(TestBean.class);

	DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
	factory.registerBeanDefinition("parent", parent);
	factory.registerBeanDefinition("child", child);

	BeanDefinition def = factory.getMergedBeanDefinition("child");
	assertEquals("Child 'scope' not inherited", "bonanza!", def.getScope());
}
 
/**
 * Tests whether a bean definition without a specified bean class is handled
 * correctly.
 */
@Test
public void postProcessorIntrospectsInheritedDefinitionsCorrectly() {
	beanFactory.registerBeanDefinition("config", new RootBeanDefinition(SingletonBeanConfig.class));
	beanFactory.registerBeanDefinition("parent", new RootBeanDefinition(TestBean.class));
	beanFactory.registerBeanDefinition("child", new ChildBeanDefinition("parent"));
	ConfigurationClassPostProcessor pp = new ConfigurationClassPostProcessor();
	pp.postProcessBeanFactory(beanFactory);
	Foo foo = beanFactory.getBean("foo", Foo.class);
	Bar bar = beanFactory.getBean("bar", Bar.class);
	assertSame(foo, bar.foo);
}
 
@Test
public void testGetTypeWorksAfterParentChildMerging() {
	RootBeanDefinition parentDefinition = new RootBeanDefinition(TestBean.class);
	ChildBeanDefinition childDefinition = new ChildBeanDefinition("parent", DerivedTestBean.class, null, null);

	DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
	factory.registerBeanDefinition("parent", parentDefinition);
	factory.registerBeanDefinition("child", childDefinition);
	factory.freezeConfiguration();

	assertEquals(TestBean.class, factory.getType("parent"));
	assertEquals(DerivedTestBean.class, factory.getType("child"));
}
 
@Test
public void testScopeInheritanceForChildBeanDefinitions() throws Exception {
	RootBeanDefinition parent = new RootBeanDefinition();
	parent.setScope("bonanza!");

	AbstractBeanDefinition child = new ChildBeanDefinition("parent");
	child.setBeanClass(TestBean.class);

	DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
	factory.registerBeanDefinition("parent", parent);
	factory.registerBeanDefinition("child", child);

	BeanDefinition def = factory.getMergedBeanDefinition("child");
	assertEquals("Child 'scope' not inherited", "bonanza!", def.getScope());
}
 
protected void emitCustomStoreBeanDefinition(final BeanDefinitionRegistry registry, final String storeName)
{
    if (registry.containsBeanDefinition(storeName))
    {
        throw new AlfrescoRuntimeException(
                storeName + " (custom content store) cannot be defined - a bean with same name already exists");
    }

    final MessageFormat mf = new MessageFormat("{0}.{1}.", Locale.ENGLISH);
    final String prefix = mf.format(new Object[] { PROP_CUSTOM_STORE_PREFIX, storeName });
    final String typeProperty = prefix + "type";
    final String typeValue = this.propertiesSource.getProperty(typeProperty);

    if (typeValue != null && !typeValue.isEmpty())
    {
        LOGGER.debug("Emitting bean definition for custom store {} based on template {}", storeName, typeValue);
        final BeanDefinition storeBeanDefinition = new ChildBeanDefinition(STORE_TEMPLATE_PREFIX + typeValue);
        storeBeanDefinition.setScope(BeanDefinition.SCOPE_SINGLETON);

        final Set<String> propertyNames = this.propertiesSource.stringPropertyNames();
        for (final String propertyName : propertyNames)
        {
            if (propertyName.startsWith(prefix) && !typeProperty.equals(propertyName))
            {
                this.handleBeanProperty(storeBeanDefinition, propertyName, this.propertiesSource.getProperty(propertyName));
            }
        }

        registry.registerBeanDefinition(storeName, storeBeanDefinition);
    }
    else
    {
        LOGGER.warn("Custom store {} does not define a type", storeName);
        throw new AlfrescoRuntimeException(storeName + " (custom content store) has not been given a type");
    }
}
 
源代码14 项目: rice   文件: DataDictionary.java
protected void generateMissingLookupDefinitions() {
    Collection<LookupView> lookupViewBeans = ddBeans.getBeansOfType(LookupView.class).values();
    // Index all the inquiry views by the data object class so we can find them easily below
    Map<Class<?>,LookupView> defaultViewsByDataObjectClass = new HashMap<Class<?>, LookupView>();
    for ( LookupView view : lookupViewBeans ) {
        if ( view.getViewName().equals(UifConstants.DEFAULT_VIEW_NAME) ) {
            defaultViewsByDataObjectClass.put(view.getDataObjectClass(), view);
        }
    }
    for (DataObjectEntry entry : ddBeans.getBeansOfType(DataObjectEntry.class).values()) {
        // if an inquiry already exists, just ignore - we only default if none exist
        if ( defaultViewsByDataObjectClass.containsKey(entry.getDataObjectClass())) {
            continue;
        }
        // We only generate the inquiry if the metadata says to
        if ( entry.getDataObjectMetadata() == null ) {
            continue;
        }
        if ( !entry.getDataObjectMetadata().shouldAutoCreateUifViewOfType(UifAutoCreateViewType.LOOKUP)) {
            continue;
        }
        // no inquiry exists and we want one to, create one
        if ( LOG.isInfoEnabled() ) {
            LOG.info( "Generating Lookup View for : " + entry.getDataObjectClass() );
        }
        String lookupBeanName = entry.getDataObjectClass().getSimpleName()+"-LookupView-default";

        LookupView lookupView = KRADServiceLocatorWeb.getUifDefaultingService().deriveLookupViewFromMetadata(entry);
        lookupView.setId(lookupBeanName);
        lookupView.setViewName(UifConstants.DEFAULT_VIEW_NAME);

        ChildBeanDefinition lookupBean = new ChildBeanDefinition(ComponentFactory.LOOKUP_VIEW);
        lookupBean.setScope(BeanDefinition.SCOPE_SINGLETON);
        lookupBean.setAttribute("dataObjectClassName", lookupView.getDataObjectClass());
        lookupBean.getPropertyValues().add("dataObjectClassName", lookupView.getDataObjectClass().getName());
        lookupBean.setResourceDescription("Autogenerated From Metadata");
        ddBeans.registerBeanDefinition(lookupBeanName, lookupBean);
        ddBeans.registerSingleton(lookupBeanName, lookupView);
    }
}
 
源代码15 项目: rice   文件: DataDictionary.java
protected void generateMissingInquiryDefinitions() {
    Collection<InquiryView> inquiryViewBeans = ddBeans.getBeansOfType(InquiryView.class).values();
    
    // Index all the inquiry views by the data object class so we can find them easily below
    Map<Class<?>,InquiryView> defaultViewsByDataObjectClass = new HashMap<Class<?>, InquiryView>();
    
    for ( InquiryView view : inquiryViewBeans ) {
        if ( view.getViewName().equals(UifConstants.DEFAULT_VIEW_NAME) ) {
            defaultViewsByDataObjectClass.put(view.getDataObjectClassName(), view);
        }
    }
    
    for (DataObjectEntry entry : ddBeans.getBeansOfType(DataObjectEntry.class).values()) {
        // if an inquiry already exists, just ignore - we only default if none exist
        if ( defaultViewsByDataObjectClass.containsKey(entry.getDataObjectClass())) {
            continue;
        }
        
        // We only generate the inquiry if the metadata says to
        if ( entry.getDataObjectMetadata() == null ) {
            continue;
        }
        
        if ( !entry.getDataObjectMetadata().shouldAutoCreateUifViewOfType(UifAutoCreateViewType.INQUIRY)) {
            continue;
        }
        
        // no inquiry exists and we want one to, create one
        if ( LOG.isInfoEnabled() ) {
            LOG.info( "Generating Inquiry View for : " + entry.getDataObjectClass() );
        }
        
        String inquiryBeanName = entry.getDataObjectClass().getSimpleName()+"-InquiryView-default";

        InquiryView inquiryView = KRADServiceLocatorWeb.getUifDefaultingService().deriveInquiryViewFromMetadata(entry);
        inquiryView.setId(inquiryBeanName);
        inquiryView.setViewName(UifConstants.DEFAULT_VIEW_NAME);

        ChildBeanDefinition inquiryBean = new ChildBeanDefinition("Uif-InquiryView");
        inquiryBean.setScope(BeanDefinition.SCOPE_SINGLETON);
        inquiryBean.setAttribute("dataObjectClassName", inquiryView.getDataObjectClassName());
        inquiryBean.getPropertyValues().add("dataObjectClassName", inquiryView.getDataObjectClassName().getName());
        inquiryBean.setResourceDescription("Autogenerated From Metadata");
        ddBeans.registerBeanDefinition(inquiryBeanName, inquiryBean);
        ddBeans.registerSingleton(inquiryBeanName, inquiryView);
    }
}
 
 类方法
 同包方法