📄 xmlbeanfactorytests.java
字号:
assertTrue(inherits.getAge() == 1);
TestBean inherits2 = (TestBean) child.getBean("protoypeInheritsFromParentFactorySingleton");
assertFalse(inherits2 == inherits);
inherits2.setAge(13);
assertTrue(inherits2.getAge() == 13);
// Shouldn't have changed first instance
assertTrue(inherits.getAge() == 1);
}
public void testAbstractParentBeans() {
XmlBeanFactory parent = new XmlBeanFactory(new ClassPathResource("parent.xml", getClass()));
parent.preInstantiateSingletons();
assertTrue(parent.isSingleton("inheritedTestBeanWithoutClass"));
// abstract beans should not match
Map tbs = parent.getBeansOfType(TestBean.class);
assertEquals(2, tbs.size());
assertTrue(tbs.containsKey("inheritedTestBeanPrototype"));
assertTrue(tbs.containsKey("inheritedTestBeanSingleton"));
// abstract bean should throw exception on creation attempt
try {
parent.getBean("inheritedTestBeanWithoutClass");
fail("Should have thrown BeanIsAbstractException");
}
catch (BeanIsAbstractException ex) {
// expected
}
// non-abstract bean should work, even if it serves as parent
assertTrue(parent.getBean("inheritedTestBeanPrototype") instanceof TestBean);
}
public void testDependenciesMaterializeThis() throws Exception {
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("dependenciesMaterializeThis.xml", getClass()));
DummyBoImpl bos = (DummyBoImpl) xbf.getBean("boSingleton");
DummyBoImpl bop = (DummyBoImpl) xbf.getBean("boPrototype");
assertNotSame(bos, bop);
assertTrue(bos.dao == bop.dao);
assertEquals(2, xbf.getBeansOfType(DummyBoImpl.class, true, true).size());
assertEquals(1, xbf.getBeansOfType(DummyBoImpl.class, false, true).size());
assertEquals(2, xbf.getBeansOfType(DummyBoImpl.class).size());
assertEquals(3, xbf.getBeansOfType(DummyBo.class, true, true).size());
assertEquals(2, xbf.getBeansOfType(DummyBo.class, true, false).size());
assertEquals(3, xbf.getBeansOfType(DummyBo.class).size());
}
public void testChildOverridesParentBean() throws Exception {
XmlBeanFactory parent = new XmlBeanFactory(new ClassPathResource("parent.xml", getClass()));
XmlBeanFactory child = new XmlBeanFactory(new ClassPathResource("child.xml", getClass()), parent);
TestBean inherits = (TestBean) child.getBean("inheritedTestBean");
// Name property value is overridden
assertTrue(inherits.getName().equals("overrideParentBean"));
// Age property is inherited from bean in parent factory
assertTrue(inherits.getAge() == 1);
TestBean inherits2 = (TestBean) child.getBean("inheritedTestBean");
assertTrue(inherits2 == inherits);
}
/**
* Check that a prototype can't inherit from a bogus parent.
* If a singleton does this the factory will fail to load.
*/
public void testBogusParentageFromParentFactory() throws Exception {
XmlBeanFactory parent = new XmlBeanFactory(new ClassPathResource("parent.xml", getClass()));
XmlBeanFactory child = new XmlBeanFactory(new ClassPathResource("child.xml", getClass()), parent);
try {
child.getBean("bogusParent", TestBean.class);
fail();
}
catch (BeanDefinitionStoreException ex) {
// check exception message contains the name
assertTrue(ex.getMessage().indexOf("bogusParent") != -1);
assertTrue(ex.getCause() instanceof NoSuchBeanDefinitionException);
}
}
/**
* Note that prototype/singleton distinction is <b>not</b> inherited.
* It's possible for a subclass singleton not to return independent
* instances even if derived from a prototype
*/
public void testSingletonInheritsFromParentFactoryPrototype() throws Exception {
XmlBeanFactory parent = new XmlBeanFactory(new ClassPathResource("parent.xml", getClass()));
XmlBeanFactory child = new XmlBeanFactory(new ClassPathResource("child.xml", getClass()), parent);
TestBean inherits = (TestBean) child.getBean("singletonInheritsFromParentFactoryPrototype");
// Name property value is overriden
assertTrue(inherits.getName().equals("prototype-override"));
// Age property is inherited from bean in parent factory
assertTrue(inherits.getAge() == 2);
TestBean inherits2 = (TestBean) child.getBean("singletonInheritsFromParentFactoryPrototype");
assertTrue(inherits2 == inherits);
}
public void testSingletonFromParent() {
XmlBeanFactory parent = new XmlBeanFactory(new ClassPathResource("parent.xml", getClass()));
TestBean beanFromParent = (TestBean) parent.getBean("inheritedTestBeanSingleton");
XmlBeanFactory child = new XmlBeanFactory(new ClassPathResource("child.xml", getClass()), parent);
TestBean beanFromChild = (TestBean) child.getBean("inheritedTestBeanSingleton");
assertTrue("singleton from parent and child is the same", beanFromParent == beanFromChild);
}
public void testNestedPropertyValue() {
XmlBeanFactory parent = new XmlBeanFactory(new ClassPathResource("parent.xml", getClass()));
XmlBeanFactory child = new XmlBeanFactory(new ClassPathResource("child.xml", getClass()), parent);
IndexedTestBean bean = (IndexedTestBean) child.getBean("indexedTestBean");
assertEquals("name applied correctly", "myname", bean.getArray()[0].getName());
}
public void testCircularReferences() {
DefaultListableBeanFactory xbf = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf);
reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_NONE);
reader.loadBeanDefinitions(new ClassPathResource("reftypes.xml", getClass()));
TestBean jenny = (TestBean) xbf.getBean("jenny");
TestBean david = (TestBean) xbf.getBean("david");
TestBean ego = (TestBean) xbf.getBean("ego");
assertTrue("Correct circular reference", jenny.getSpouse() == david);
assertTrue("Correct circular reference", david.getSpouse() == jenny);
assertTrue("Correct circular reference", ego.getSpouse() == ego);
}
public void testCircularReferencesWithNotAllowed() {
DefaultListableBeanFactory xbf = new DefaultListableBeanFactory();
xbf.setAllowCircularReferences(false);
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf);
reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_NONE);
reader.loadBeanDefinitions(new ClassPathResource("reftypes.xml", getClass()));
try {
xbf.getBean("jenny");
fail("Should have thrown BeanCreationException");
}
catch (BeanCreationException ex) {
assertTrue(ex.contains(BeanCurrentlyInCreationException.class));
}
}
public void testCircularReferencesWithWrapping() {
DefaultListableBeanFactory xbf = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf);
reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_NONE);
reader.loadBeanDefinitions(new ClassPathResource("reftypes.xml", getClass()));
xbf.addBeanPostProcessor(new WrappingPostProcessor());
try {
xbf.getBean("jenny");
fail("Should have thrown BeanCreationException");
}
catch (BeanCreationException ex) {
assertTrue(ex.contains(BeanCurrentlyInCreationException.class));
}
}
public void testCircularReferencesWithWrappingAndRawInjectionAllowed() {
DefaultListableBeanFactory xbf = new DefaultListableBeanFactory();
xbf.setAllowRawInjectionDespiteWrapping(true);
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf);
reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_NONE);
reader.loadBeanDefinitions(new ClassPathResource("reftypes.xml", getClass()));
xbf.addBeanPostProcessor(new WrappingPostProcessor());
ITestBean jenny = (ITestBean) xbf.getBean("jenny");
ITestBean david = (ITestBean) xbf.getBean("david");
assertTrue(AopUtils.isAopProxy(jenny));
assertTrue(AopUtils.isAopProxy(david));
assertSame(david, jenny.getSpouse());
assertNotSame(jenny, david.getSpouse());
assertEquals("Jenny", david.getSpouse().getName());
assertSame(david, david.getSpouse().getSpouse());
assertTrue(AopUtils.isAopProxy(jenny.getSpouse()));
assertTrue(!AopUtils.isAopProxy(david.getSpouse()));
}
public void testFactoryReferenceCircle() {
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("factoryCircle.xml", getClass()));
TestBean tb = (TestBean) xbf.getBean("singletonFactory");
DummyFactory db = (DummyFactory) xbf.getBean("&singletonFactory");
assertTrue(tb == db.getOtherTestBean());
}
public void testComplexFactoryReferenceCircle() {
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("complexFactoryCircle.xml", getClass()));
xbf.getBean("proxy1");
// check that unused instances from autowiring got removed
assertEquals(5, xbf.getSingletonCount());
// properly create the remaining two instances
xbf.getBean("proxy2");
assertEquals(7, xbf.getSingletonCount());
}
public void testNoSuchFactoryBeanMethod() {
try {
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("no-such-factory-method.xml", getClass()));
assertNotNull(xbf.getBean("defaultTestBean"));
fail("Should not get invalid bean");
}
catch (BeanCreationException ex) {
// Ok
}
}
public void testInitMethodIsInvoked() throws Exception {
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("initializers.xml", getClass()));
DoubleInitializer in = (DoubleInitializer) xbf.getBean("init-method1");
// Initializer should have doubled value
assertEquals(14, in.getNum());
}
/**
* Test that if a custom initializer throws an exception, it's handled correctly
*/
public void testInitMethodThrowsException() {
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("initializers.xml", getClass()));
try {
xbf.getBean("init-method2");
fail();
}
catch (BeanCreationException ex) {
assertTrue(ex.getResourceDescription().indexOf("initializers.xml") != -1);
assertEquals("init-method2", ex.getBeanName());
assertTrue(ex.getCause() instanceof ServletException);
}
}
public void testNoSuchInitMethod() throws Exception {
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("initializers.xml", getClass()));
try {
xbf.getBean("init-method3");
fail();
}
catch (FatalBeanException ex) {
// check message is helpful
assertTrue(ex.getMessage().indexOf("initializers.xml") != -1);
assertTrue(ex.getMessage().indexOf("init-method3") != -1);
assertTrue(ex.getMessage().indexOf("init") != -1);
}
}
/**
* Check that InitializingBean method is called first.
*/
public void testInitializingBeanAndInitMethod() throws Exception {
InitAndIB.constructed = false;
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("initializers.xml", getClass()));
assertFalse(InitAndIB.constructed);
xbf.preInstantiateSingletons();
assertFalse(InitAndIB.constructed);
InitAndIB iib = (InitAndIB) xbf.getBean("init-and-ib");
assertTrue(InitAndIB.constructed);
assertTrue(iib.afterPropertiesSetInvoked && iib.initMethodInvoked);
assertTrue(!iib.destroyed && !iib.customDestroyed);
xbf.destroySingletons();
assertTrue(iib.destroyed && iib.customDestroyed);
xbf.destroySingletons();
assertTrue(iib.destroyed && iib.customDestroyed);
}
/**
* Check that InitializingBean method is called first.
*/
public void testDefaultLazyInit() throws Exception {
InitAndIB.constructed = false;
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("default-lazy-init.xml", getClass()));
assertFalse(InitAndIB.constructed);
xbf.preInstantiateSingletons();
assertTrue(InitAndIB.constructed);
try {
xbf.getBean("lazy-and-bad");
}
catch (BeanCreationException ex) {
assertTrue(ex.getCause() instanceof ServletException);
}
}
public void testNoSuchXmlFile() throws Exception {
try {
new XmlBeanFactory(new ClassPathResource("missing.xml", getClass()));
fail("Must not create factory from missing XML");
}
catch (BeanDefinitionStoreException expected) {
}
}
public void testInvalidXmlFile() throws Exception {
try {
new XmlBeanFactory(new ClassPathResource("invalid.xml", getClass()));
fail("Must not create factory from invalid XML");
}
catch (BeanDefinitionStoreException expected) {
}
}
public void testUnsatisfiedObjectDependencyCheck() throws Exception {
try {
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("unsatisfiedObjectDependencyCheck.xml", getClass()));
xbf.getBean("a", DependenciesBean.class);
fail("Must have thrown an UnsatisfiedDependencyException");
}
catch (UnsatisfiedDependencyException ex) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -