Search in sources :

Example 1 with PropertyPlaceholderConfigurer

use of cn.taketoday.beans.factory.config.PropertyPlaceholderConfigurer in project today-infrastructure by TAKETODAY.

the class CommonAnnotationBeanPostProcessorTests method testResourceInjectionWithResolvableDependencyType.

@Test
public void testResourceInjectionWithResolvableDependencyType() {
    StandardBeanFactory bf = new StandardBeanFactory();
    CommonAnnotationBeanPostProcessor bpp = new CommonAnnotationBeanPostProcessor();
    bpp.setBeanFactory(bf);
    bf.addBeanPostProcessor(bpp);
    BeanDefinition abd = new RootBeanDefinition(ExtendedResourceInjectionBean.class);
    abd.setScope(BeanDefinition.SCOPE_PROTOTYPE);
    bf.registerBeanDefinition("annotatedBean", abd);
    BeanDefinition tbd = new RootBeanDefinition(TestBean.class);
    tbd.setScope(BeanDefinition.SCOPE_PROTOTYPE);
    bf.registerBeanDefinition("testBean4", tbd);
    bf.registerDependency(BeanFactory.class, bf);
    bf.registerDependency(INestedTestBean.class, (Supplier<NestedTestBean>) NestedTestBean::new);
    PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
    Properties props = new Properties();
    props.setProperty("tb", "testBean4");
    ppc.setProperties(props);
    ppc.postProcessBeanFactory(bf);
    ExtendedResourceInjectionBean bean = (ExtendedResourceInjectionBean) bf.getBean("annotatedBean");
    INestedTestBean tb = bean.getTestBean6();
    assertThat(tb).isNotNull();
    ExtendedResourceInjectionBean anotherBean = (ExtendedResourceInjectionBean) bf.getBean("annotatedBean");
    assertThat(bean).isNotSameAs(anotherBean);
    assertThat(tb).isNotSameAs(anotherBean.getTestBean6());
    String[] depBeans = bf.getDependenciesForBean("annotatedBean");
    assertThat(depBeans.length).isEqualTo(1);
    assertThat(depBeans[0]).isEqualTo("testBean4");
}
Also used : PropertyPlaceholderConfigurer(cn.taketoday.beans.factory.config.PropertyPlaceholderConfigurer) INestedTestBean(cn.taketoday.beans.testfixture.beans.INestedTestBean) NestedTestBean(cn.taketoday.beans.testfixture.beans.NestedTestBean) INestedTestBean(cn.taketoday.beans.testfixture.beans.INestedTestBean) RootBeanDefinition(cn.taketoday.beans.factory.support.RootBeanDefinition) StandardBeanFactory(cn.taketoday.beans.factory.support.StandardBeanFactory) BeanDefinition(cn.taketoday.beans.factory.config.BeanDefinition) RootBeanDefinition(cn.taketoday.beans.factory.support.RootBeanDefinition) Properties(java.util.Properties) Test(org.junit.jupiter.api.Test)

Example 2 with PropertyPlaceholderConfigurer

use of cn.taketoday.beans.factory.config.PropertyPlaceholderConfigurer in project today-infrastructure by TAKETODAY.

the class CommonAnnotationBeanPostProcessorTests method testExtendedResourceInjection.

@Test
public void testExtendedResourceInjection() {
    StandardBeanFactory bf = new StandardBeanFactory();
    CommonAnnotationBeanPostProcessor bpp = new CommonAnnotationBeanPostProcessor();
    bpp.setBeanFactory(bf);
    bf.addBeanPostProcessor(bpp);
    bf.registerDependency(BeanFactory.class, bf);
    PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
    Properties props = new Properties();
    props.setProperty("tb", "testBean3");
    ppc.setProperties(props);
    ppc.postProcessBeanFactory(bf);
    bf.registerBeanDefinition("annotatedBean", new RootBeanDefinition(ExtendedResourceInjectionBean.class));
    bf.registerBeanDefinition("annotatedBean2", new RootBeanDefinition(NamedResourceInjectionBean.class));
    bf.registerBeanDefinition("annotatedBean3", new RootBeanDefinition(ConvertedResourceInjectionBean.class));
    TestBean tb = new TestBean();
    bf.registerSingleton("testBean", tb);
    TestBean tb2 = new TestBean();
    bf.registerSingleton("testBean2", tb2);
    TestBean tb3 = new TestBean();
    bf.registerSingleton("testBean3", tb3);
    TestBean tb4 = new TestBean();
    bf.registerSingleton("testBean4", tb4);
    NestedTestBean tb6 = new NestedTestBean();
    bf.registerSingleton("value", "5");
    bf.registerSingleton("xy", tb6);
    bf.registerAlias("xy", "testBean9");
    ExtendedResourceInjectionBean bean = (ExtendedResourceInjectionBean) bf.getBean("annotatedBean");
    assertThat(bean.initCalled).isTrue();
    assertThat(bean.init2Called).isTrue();
    assertThat(bean.getTestBean()).isSameAs(tb);
    assertThat(bean.getTestBean2()).isSameAs(tb2);
    assertThat(bean.getTestBean3()).isSameAs(tb4);
    assertThat(bean.getTestBean4()).isSameAs(tb3);
    assertThat(bean.testBean5).isSameAs(tb6);
    assertThat(bean.testBean6).isSameAs(tb6);
    assertThat(bean.beanFactory).isSameAs(bf);
    NamedResourceInjectionBean bean2 = (NamedResourceInjectionBean) bf.getBean("annotatedBean2");
    assertThat(bean2.testBean).isSameAs(tb6);
    ConvertedResourceInjectionBean bean3 = (ConvertedResourceInjectionBean) bf.getBean("annotatedBean3");
    assertThat(bean3.value).isSameAs(5);
    bf.destroySingletons();
    assertThat(bean.destroyCalled).isTrue();
    assertThat(bean.destroy2Called).isTrue();
}
Also used : PropertyPlaceholderConfigurer(cn.taketoday.beans.factory.config.PropertyPlaceholderConfigurer) NestedTestBean(cn.taketoday.beans.testfixture.beans.NestedTestBean) ITestBean(cn.taketoday.beans.testfixture.beans.ITestBean) INestedTestBean(cn.taketoday.beans.testfixture.beans.INestedTestBean) TestBean(cn.taketoday.beans.testfixture.beans.TestBean) NestedTestBean(cn.taketoday.beans.testfixture.beans.NestedTestBean) INestedTestBean(cn.taketoday.beans.testfixture.beans.INestedTestBean) RootBeanDefinition(cn.taketoday.beans.factory.support.RootBeanDefinition) StandardBeanFactory(cn.taketoday.beans.factory.support.StandardBeanFactory) Properties(java.util.Properties) Test(org.junit.jupiter.api.Test)

Example 3 with PropertyPlaceholderConfigurer

use of cn.taketoday.beans.factory.config.PropertyPlaceholderConfigurer in project today-infrastructure by TAKETODAY.

the class CommonAnnotationBeanPostProcessorTests method testExtendedResourceInjectionWithOverriding.

@Test
public void testExtendedResourceInjectionWithOverriding() {
    StandardBeanFactory bf = new StandardBeanFactory();
    CommonAnnotationBeanPostProcessor bpp = new CommonAnnotationBeanPostProcessor();
    bpp.setBeanFactory(bf);
    bf.addBeanPostProcessor(bpp);
    bf.registerDependency(BeanFactory.class, bf);
    PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
    Properties props = new Properties();
    props.setProperty("tb", "testBean3");
    ppc.setProperties(props);
    ppc.postProcessBeanFactory(bf);
    BeanDefinition annotatedBd = new RootBeanDefinition(ExtendedResourceInjectionBean.class);
    TestBean tb5 = new TestBean();
    annotatedBd.getPropertyValues().add("testBean2", tb5);
    bf.registerBeanDefinition("annotatedBean", annotatedBd);
    bf.registerBeanDefinition("annotatedBean2", new RootBeanDefinition(NamedResourceInjectionBean.class));
    TestBean tb = new TestBean();
    bf.registerSingleton("testBean", tb);
    TestBean tb2 = new TestBean();
    bf.registerSingleton("testBean2", tb2);
    TestBean tb3 = new TestBean();
    bf.registerSingleton("testBean3", tb3);
    TestBean tb4 = new TestBean();
    bf.registerSingleton("testBean4", tb4);
    NestedTestBean tb6 = new NestedTestBean();
    bf.registerSingleton("xy", tb6);
    ExtendedResourceInjectionBean bean = (ExtendedResourceInjectionBean) bf.getBean("annotatedBean");
    assertThat(bean.initCalled).isTrue();
    assertThat(bean.init2Called).isTrue();
    assertThat(bean.getTestBean()).isSameAs(tb);
    assertThat(bean.getTestBean2()).isSameAs(tb5);
    assertThat(bean.getTestBean3()).isSameAs(tb4);
    assertThat(bean.getTestBean4()).isSameAs(tb3);
    assertThat(bean.testBean5).isSameAs(tb6);
    assertThat(bean.testBean6).isSameAs(tb6);
    assertThat(bean.beanFactory).isSameAs(bf);
    try {
        bf.getBean("annotatedBean2");
    } catch (BeanCreationException ex) {
        boolean condition = ex.getRootCause() instanceof NoSuchBeanDefinitionException;
        assertThat(condition).isTrue();
        NoSuchBeanDefinitionException innerEx = (NoSuchBeanDefinitionException) ex.getRootCause();
        assertThat(innerEx.getBeanName()).isEqualTo("testBean9");
    }
    bf.destroySingletons();
    assertThat(bean.destroyCalled).isTrue();
    assertThat(bean.destroy2Called).isTrue();
}
Also used : PropertyPlaceholderConfigurer(cn.taketoday.beans.factory.config.PropertyPlaceholderConfigurer) BeanCreationException(cn.taketoday.beans.factory.BeanCreationException) NestedTestBean(cn.taketoday.beans.testfixture.beans.NestedTestBean) ITestBean(cn.taketoday.beans.testfixture.beans.ITestBean) INestedTestBean(cn.taketoday.beans.testfixture.beans.INestedTestBean) TestBean(cn.taketoday.beans.testfixture.beans.TestBean) NestedTestBean(cn.taketoday.beans.testfixture.beans.NestedTestBean) INestedTestBean(cn.taketoday.beans.testfixture.beans.INestedTestBean) RootBeanDefinition(cn.taketoday.beans.factory.support.RootBeanDefinition) StandardBeanFactory(cn.taketoday.beans.factory.support.StandardBeanFactory) Properties(java.util.Properties) BeanDefinition(cn.taketoday.beans.factory.config.BeanDefinition) RootBeanDefinition(cn.taketoday.beans.factory.support.RootBeanDefinition) NoSuchBeanDefinitionException(cn.taketoday.beans.factory.NoSuchBeanDefinitionException) Test(org.junit.jupiter.api.Test)

Example 4 with PropertyPlaceholderConfigurer

use of cn.taketoday.beans.factory.config.PropertyPlaceholderConfigurer in project today-framework by TAKETODAY.

the class PropertyResourceConfigurerTests method testPropertyPlaceholderConfigurerWithSystemPropertyFallback.

@Test
public void testPropertyPlaceholderConfigurerWithSystemPropertyFallback() {
    factory.registerBeanDefinition("tb", genericBeanDefinition(TestBean.class).addPropertyValue("country", "${os.name}").getBeanDefinition());
    PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
    ppc.postProcessBeanFactory(factory);
    TestBean tb = (TestBean) factory.getBean("tb");
    assertThat(tb.getCountry()).isEqualTo(System.getProperty("os.name"));
}
Also used : PropertyPlaceholderConfigurer(cn.taketoday.beans.factory.config.PropertyPlaceholderConfigurer) IndexedTestBean(cn.taketoday.beans.testfixture.beans.IndexedTestBean) TestBean(cn.taketoday.beans.testfixture.beans.TestBean) Test(org.junit.jupiter.api.Test)

Example 5 with PropertyPlaceholderConfigurer

use of cn.taketoday.beans.factory.config.PropertyPlaceholderConfigurer in project today-framework by TAKETODAY.

the class PropertyResourceConfigurerTests method doTestPropertyPlaceholderConfigurer.

private void doTestPropertyPlaceholderConfigurer(boolean parentChildSeparation) {
    Map<String, String> singletonMap = Collections.singletonMap("myKey", "myValue");
    if (parentChildSeparation) {
        PropertyValues pvs1 = new PropertyValues();
        pvs1.add("age", "${age}");
        PropertyValues pvs2 = new PropertyValues();
        pvs2.add("name", "name${var}${var}${");
        pvs2.add("spouse", new RuntimeBeanReference("${ref}"));
        pvs2.add("someMap", singletonMap);
        RootBeanDefinition parent = new RootBeanDefinition(TestBean.class);
        parent.setPropertyValues(pvs1);
        ChildBeanDefinition bd = new ChildBeanDefinition("${parent}", pvs2);
        factory.registerBeanDefinition("parent1", parent);
        factory.registerBeanDefinition("tb1", bd);
    } else {
        PropertyValues pvs = new PropertyValues();
        pvs.add("age", "${age}");
        pvs.add("name", "name${var}${var}${");
        pvs.add("spouse", new RuntimeBeanReference("${ref}"));
        pvs.add("someMap", singletonMap);
        RootBeanDefinition bd = new RootBeanDefinition(TestBean.class);
        bd.setPropertyValues(pvs);
        factory.registerBeanDefinition("tb1", bd);
    }
    ConstructorArgumentValues cas = new ConstructorArgumentValues();
    cas.addIndexedArgumentValue(1, "${age}");
    cas.addGenericArgumentValue("${var}name${age}");
    PropertyValues pvs = new PropertyValues();
    pvs.add("stringArray", new String[] { "${os.name}", "${age}" });
    List<Object> friends = ManagedList.of("na${age}me", new RuntimeBeanReference("${ref}"));
    pvs.add("friends", friends);
    Set<Object> someSet = ManagedSet.of("na${age}me", new RuntimeBeanReference("${ref}"), new TypedStringValue("${age}", Integer.class));
    pvs.add("someSet", someSet);
    Map<Object, Object> someMap = ManagedMap.ofEntries(Map.entry(new TypedStringValue("key${age}"), new TypedStringValue("${age}")), Map.entry(new TypedStringValue("key${age}ref"), new RuntimeBeanReference("${ref}")), Map.entry("key1", new RuntimeBeanReference("${ref}")), Map.entry("key2", "${age}name"));
    PropertyValues innerPvs = new PropertyValues();
    innerPvs.add("country", "${os.name}");
    RootBeanDefinition innerBd = new RootBeanDefinition(TestBean.class);
    innerBd.setPropertyValues(innerPvs);
    someMap.put("key3", innerBd);
    PropertyValues innerPvs2 = new PropertyValues(innerPvs);
    someMap.put("${key4}", new BeanDefinitionHolder(new ChildBeanDefinition("tb1", innerPvs2), "child"));
    pvs.add("someMap", someMap);
    RootBeanDefinition bd = new RootBeanDefinition(TestBean.class, cas, pvs);
    factory.registerBeanDefinition("tb2", bd);
    PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
    Properties props = new Properties();
    props.setProperty("age", "98");
    props.setProperty("var", "${m}var");
    props.setProperty("ref", "tb2");
    props.setProperty("m", "my");
    props.setProperty("key4", "mykey4");
    props.setProperty("parent", "parent1");
    ppc.setProperties(props);
    ppc.postProcessBeanFactory(factory);
    TestBean tb1 = (TestBean) factory.getBean("tb1");
    TestBean tb2 = (TestBean) factory.getBean("tb2");
    assertThat(tb1.getAge()).isEqualTo(98);
    assertThat(tb2.getAge()).isEqualTo(98);
    assertThat(tb1.getName()).isEqualTo("namemyvarmyvar${");
    assertThat(tb2.getName()).isEqualTo("myvarname98");
    assertThat(tb1.getSpouse()).isEqualTo(tb2);
    assertThat(tb1.getSomeMap().size()).isEqualTo(1);
    assertThat(tb1.getSomeMap().get("myKey")).isEqualTo("myValue");
    assertThat(tb2.getStringArray().length).isEqualTo(2);
    assertThat(tb2.getStringArray()[0]).isEqualTo(System.getProperty("os.name"));
    assertThat(tb2.getStringArray()[1]).isEqualTo("98");
    assertThat(tb2.getFriends().size()).isEqualTo(2);
    assertThat(tb2.getFriends().iterator().next()).isEqualTo("na98me");
    assertThat(tb2.getFriends().toArray()[1]).isEqualTo(tb2);
    assertThat(tb2.getSomeSet().size()).isEqualTo(3);
    assertThat(tb2.getSomeSet().contains("na98me")).isTrue();
    assertThat(tb2.getSomeSet().contains(tb2)).isTrue();
    assertThat(tb2.getSomeSet().contains(98)).isTrue();
    assertThat(tb2.getSomeMap().size()).isEqualTo(6);
    assertThat(tb2.getSomeMap().get("key98")).isEqualTo("98");
    assertThat(tb2.getSomeMap().get("key98ref")).isEqualTo(tb2);
    assertThat(tb2.getSomeMap().get("key1")).isEqualTo(tb2);
    assertThat(tb2.getSomeMap().get("key2")).isEqualTo("98name");
    TestBean inner1 = (TestBean) tb2.getSomeMap().get("key3");
    TestBean inner2 = (TestBean) tb2.getSomeMap().get("mykey4");
    assertThat(inner1.getAge()).isEqualTo(0);
    assertThat(inner1.getName()).isNull();
    assertThat(inner1.getCountry()).isEqualTo(System.getProperty("os.name"));
    assertThat(inner2.getAge()).isEqualTo(98);
    assertThat(inner2.getName()).isEqualTo("namemyvarmyvar${");
    assertThat(inner2.getCountry()).isEqualTo(System.getProperty("os.name"));
}
Also used : PropertyPlaceholderConfigurer(cn.taketoday.beans.factory.config.PropertyPlaceholderConfigurer) PropertyValues(cn.taketoday.beans.PropertyValues) ChildBeanDefinition(cn.taketoday.beans.factory.support.ChildBeanDefinition) Properties(java.util.Properties) ConstructorArgumentValues(cn.taketoday.beans.factory.config.ConstructorArgumentValues) IndexedTestBean(cn.taketoday.beans.testfixture.beans.IndexedTestBean) TestBean(cn.taketoday.beans.testfixture.beans.TestBean) BeanDefinitionHolder(cn.taketoday.beans.factory.config.BeanDefinitionHolder) RootBeanDefinition(cn.taketoday.beans.factory.support.RootBeanDefinition) TypedStringValue(cn.taketoday.beans.factory.config.TypedStringValue) RuntimeBeanReference(cn.taketoday.beans.factory.config.RuntimeBeanReference)

Aggregations

PropertyPlaceholderConfigurer (cn.taketoday.beans.factory.config.PropertyPlaceholderConfigurer)22 Test (org.junit.jupiter.api.Test)21 TestBean (cn.taketoday.beans.testfixture.beans.TestBean)19 Properties (java.util.Properties)16 IndexedTestBean (cn.taketoday.beans.testfixture.beans.IndexedTestBean)15 RootBeanDefinition (cn.taketoday.beans.factory.support.RootBeanDefinition)7 StandardBeanFactory (cn.taketoday.beans.factory.support.StandardBeanFactory)6 INestedTestBean (cn.taketoday.beans.testfixture.beans.INestedTestBean)6 NestedTestBean (cn.taketoday.beans.testfixture.beans.NestedTestBean)6 BeanDefinition (cn.taketoday.beans.factory.config.BeanDefinition)4 ITestBean (cn.taketoday.beans.testfixture.beans.ITestBean)4 BeanCreationException (cn.taketoday.beans.factory.BeanCreationException)2 NoSuchBeanDefinitionException (cn.taketoday.beans.factory.NoSuchBeanDefinitionException)2 PropertyValues (cn.taketoday.beans.PropertyValues)1 BeanDefinitionHolder (cn.taketoday.beans.factory.config.BeanDefinitionHolder)1 ConstructorArgumentValues (cn.taketoday.beans.factory.config.ConstructorArgumentValues)1 RuntimeBeanReference (cn.taketoday.beans.factory.config.RuntimeBeanReference)1 TypedStringValue (cn.taketoday.beans.factory.config.TypedStringValue)1 ChildBeanDefinition (cn.taketoday.beans.factory.support.ChildBeanDefinition)1