下面列出了怎么用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");
}
}
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);
}
}
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);
}
}