/** * Returns Petite bean instance. * Petite container will find the bean in corresponding scope and all its dependencies, * either by constructor or property injection. When using constructor injection, cyclic dependencies * can not be prevented, but at least they are detected. * * @see PetiteContainer#createBean(Class) */ public <T> T getBean(final String name) { // Lookup for registered bean definition. BeanDefinition def = lookupBeanDefinition(name); if (def == null) { // try provider ProviderDefinition providerDefinition = providers.get(name); if (providerDefinition != null) { return (T) invokeProvider(providerDefinition); } return null; } // Find the bean in its scope Object bean = def.scopeLookup(); if (bean == null) { // Create new bean in the scope initBeanDefinition(def); final BeanData beanData = new BeanData(this, def); registerBeanAndWireAndInjectParamsAndInvokeInitMethods(beanData); bean = beanData.bean(); } return (T) bean; }
@Test void testWire() { PetiteContainer pc = new PetiteContainer(); pc.registerPetiteBean(InBean.class); BeBean beBean = new BeBean(); assertNull(beBean.inBean); pc.wire(beBean); assertNotNull(beBean.inBean); assertNotNull(pc.lookupBeanDefinition("inBean")); assertNull(pc.lookupBeanDefinition("beBean")); assertEquals(1, pc.beansCount()); assertEquals(0, pc.externalsCache.size()); }
@Test void testCount() { PetiteContainer pc = new PetiteContainer(); pc.registerPetiteBean(Moo.class, null, null, null, false, null); pc.registerPetiteBean(Joo.class, null, null, null, false, null); Moo moo = pc.getBean(Moo.class); assertNotNull(moo.joo); assertNull(moo.jooNo); BeanDefinition bd = pc.lookupBeanDefinition("moo"); assertEquals(1, bd.properties.length); pc = new PetiteContainer(); pc.config().setDefaultWiringMode(WiringMode.AUTOWIRE); pc.registerPetiteBean(Moo.class, null, null, null, false, null); pc.registerPetiteBean(Joo.class, null, null, null, false, null); moo = pc.getBean(Moo.class); assertNotNull(moo.joo); assertNotNull(moo.jooNo); assertEquals(moo.joo, moo.jooNo); bd = pc.lookupBeanDefinition("moo"); assertEquals(2, bd.properties.length); }
@Test void testWire_withCache() { PetiteContainer pc = new PetiteContainer(); pc.setExternalsCache(TypeCache.createDefault()); pc.registerPetiteBean(InBean.class); BeBean beBean = new BeBean(); assertNull(beBean.inBean); pc.wire(beBean); assertNotNull(beBean.inBean); assertNotNull(pc.lookupBeanDefinition("inBean")); assertNull(pc.lookupBeanDefinition("beBean")); assertEquals(1, pc.beansCount()); // repeating beBean = new BeBean(); pc.wire(beBean); assertNotNull(beBean.inBean); assertEquals(1, pc.beansCount()); assertEquals(1, pc.externalsCache.size()); } }
BeanDefinition beanDefinition = pc.lookupBeanDefinition("myBiz"); assertNotNull(beanDefinition); assertEquals("myBiz", beanDefinition.name()); assertNotNull(myBiz); BeanDefinition altBeanDefinition = pc.lookupBeanDefinition("biz"); assertNotNull(altBeanDefinition); assertEquals("myBiz", altBeanDefinition.name()); beanDefinition = pc.lookupBeanDefinition("myBiz"); assertNotNull(beanDefinition); assertEquals("myBiz", beanDefinition.name()); altBeanDefinition = pc.lookupBeanDefinition("biz"); assertNull(altBeanDefinition); beanDefinition = pc.lookupBeanDefinition("myBiz"); assertNotNull(beanDefinition); assertEquals("myBiz", beanDefinition.name()); altBeanDefinition = pc.lookupBeanDefinition("biz"); assertNull(altBeanDefinition);
/** * Returns Petite bean instance. * Petite container will find the bean in corresponding scope and all its dependencies, * either by constructor or property injection. When using constructor injection, cyclic dependencies * can not be prevented, but at least they are detected. * * @see PetiteContainer#createBean(Class) */ public <T> T getBean(final String name) { // Lookup for registered bean definition. BeanDefinition def = lookupBeanDefinition(name); if (def == null) { // try provider ProviderDefinition providerDefinition = providers.get(name); if (providerDefinition != null) { return (T) invokeProvider(providerDefinition); } return null; } // Find the bean in its scope Object bean = def.scopeLookup(); if (bean == null) { // Create new bean in the scope initBeanDefinition(def); final BeanData beanData = new BeanData(this, def); registerBeanAndWireAndInjectParamsAndInvokeInitMethods(beanData); bean = beanData.bean(); } return (T) bean; }
BeanDefinition def = lookupBeanDefinition(name); if (def == null) { return null;