📄 xmlbeanfactorytests.java
字号:
xbf.destroySingletons();
assertTrue(tb.wasDestroyed());
}
public void testFactoryMethodsWithNull() {
DefaultListableBeanFactory xbf = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf);
reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_AUTO);
reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass()));
FactoryMethods fm = (FactoryMethods) xbf.getBean("fullWithNull");
assertEquals(27, fm.getNum());
assertEquals(null, fm.getName());
assertEquals("Juergen", fm.getTestBean().getName());
fm = (FactoryMethods) xbf.getBean("fullWithGenericNull");
assertEquals(27, fm.getNum());
assertEquals(null, fm.getName());
assertEquals("Juergen", fm.getTestBean().getName());
}
public void testFactoryMethodsWithAutowire() {
DefaultListableBeanFactory xbf = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf);
reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_AUTO);
reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass()));
FactoryMethods fm = (FactoryMethods) xbf.getBean("fullWithAutowire");
assertEquals(27, fm.getNum());
assertEquals("gotchaAutowired", fm.getName());
assertEquals("Juergen", fm.getTestBean().getName());
}
public void testProtectedFactoryMethod() {
DefaultListableBeanFactory xbf = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf);
reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_AUTO);
reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass()));
TestBean tb = (TestBean) xbf.getBean("defaultTestBean.protected");
assertEquals(1, tb.getAge());
}
public void testPrivateFactoryMethod() {
DefaultListableBeanFactory xbf = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf);
reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_AUTO);
reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass()));
TestBean tb = (TestBean) xbf.getBean("defaultTestBean.private");
assertEquals(1, tb.getAge());
}
public void testFactoryMethodsPrototypeOnTargetClass() {
DefaultListableBeanFactory xbf = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf);
reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_AUTO);
reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass()));
FactoryMethods fm = (FactoryMethods) xbf.getBean("defaultPrototype");
FactoryMethods fm2 = (FactoryMethods) xbf.getBean("defaultPrototype");
assertEquals(0, fm.getNum());
assertEquals("default", fm.getName());
assertEquals("defaultInstance", fm.getTestBean().getName());
assertEquals("setterString", fm.getStringValue());
assertEquals(fm.getNum(), fm2.getNum());
assertEquals(fm.getStringValue(), fm2.getStringValue());
// The TestBean is created separately for each bean
assertNotSame(fm.getTestBean(), fm2.getTestBean());
assertNotSame(fm, fm2);
fm = (FactoryMethods) xbf.getBean("testBeanOnlyPrototype");
fm2 = (FactoryMethods) xbf.getBean("testBeanOnlyPrototype");
assertEquals(0, fm.getNum());
assertEquals("default", fm.getName());
// This comes from the test bean
assertEquals("Juergen", fm.getTestBean().getName());
assertEquals(fm.getNum(), fm2.getNum());
assertEquals(fm.getStringValue(), fm2.getStringValue());
// The TestBean reference is resolved to a prototype in the factory
assertSame(fm.getTestBean(), fm2.getTestBean());
assertNotSame(fm, fm2);
fm = (FactoryMethods) xbf.getBean("fullPrototype");
fm2 = (FactoryMethods) xbf.getBean("fullPrototype");
assertEquals(27, fm.getNum());
assertEquals("gotcha", fm.getName());
assertEquals("Juergen", fm.getTestBean().getName());
assertEquals(fm.getNum(), fm2.getNum());
assertEquals(fm.getStringValue(), fm2.getStringValue());
// The TestBean reference is resolved to a prototype in the factory
assertSame(fm.getTestBean(), fm2.getTestBean());
assertNotSame(fm, fm2);
}
/**
* Tests where the static factory method is on a different class.
*/
public void testFactoryMethodsOnExternalClass() {
DefaultListableBeanFactory xbf = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf);
reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_AUTO);
reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass()));
assertEquals(TestBean.class, xbf.getType("externalFactoryMethodWithoutArgs"));
assertEquals(TestBean.class, xbf.getType("externalFactoryMethodWithArgs"));
String[] names = xbf.getBeanNamesForType(TestBean.class);
assertTrue(Arrays.asList(names).contains("externalFactoryMethodWithoutArgs"));
assertTrue(Arrays.asList(names).contains("externalFactoryMethodWithArgs"));
TestBean tb = (TestBean) xbf.getBean("externalFactoryMethodWithoutArgs");
assertEquals(2, tb.getAge());
assertEquals("Tristan", tb.getName());
tb = (TestBean) xbf.getBean("externalFactoryMethodWithArgs");
assertEquals(33, tb.getAge());
assertEquals("Rod", tb.getName());
assertEquals(TestBean.class, xbf.getType("externalFactoryMethodWithoutArgs"));
assertEquals(TestBean.class, xbf.getType("externalFactoryMethodWithArgs"));
names = xbf.getBeanNamesForType(TestBean.class);
assertTrue(Arrays.asList(names).contains("externalFactoryMethodWithoutArgs"));
assertTrue(Arrays.asList(names).contains("externalFactoryMethodWithArgs"));
}
public void testInstanceFactoryMethodWithoutArgs() {
DefaultListableBeanFactory xbf = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf);
reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_AUTO);
reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass()));
InstanceFactory.count = 0;
xbf.preInstantiateSingletons();
assertEquals(1, InstanceFactory.count);
FactoryMethods fm = (FactoryMethods) xbf.getBean("instanceFactoryMethodWithoutArgs");
assertEquals("instanceFactory", fm.getTestBean().getName());
assertEquals(1, InstanceFactory.count);
FactoryMethods fm2 = (FactoryMethods) xbf.getBean("instanceFactoryMethodWithoutArgs");
assertEquals("instanceFactory", fm2.getTestBean().getName());
assertSame(fm2, fm);
assertEquals(1, InstanceFactory.count);
}
public void testFactoryMethodNoMatchingStaticMethod() {
DefaultListableBeanFactory xbf = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf);
reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_AUTO);
reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass()));
try {
xbf.getBean("noMatchPrototype");
fail("No static method matched");
}
catch (BeanCreationException ex) {
// Ok
}
}
public void testCanSpecifyFactoryMethodArgumentsOnFactoryMethodPrototype() {
DefaultListableBeanFactory xbf = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf);
reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_AUTO);
reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass()));
TestBean tbArg = new TestBean();
tbArg.setName("arg1");
TestBean tbArg2 = new TestBean();
tbArg2.setName("arg2");
FactoryMethods fm1 = (FactoryMethods) xbf.getBean("testBeanOnlyPrototype", new Object[] {tbArg});
FactoryMethods fm2 = (FactoryMethods) xbf.getBean("testBeanOnlyPrototype", new Object[] {tbArg2});
assertEquals(0, fm1.getNum());
assertEquals("default", fm1.getName());
// This comes from the test bean
assertEquals("arg1", fm1.getTestBean().getName());
assertEquals("arg2", fm2.getTestBean().getName());
assertEquals(fm1.getNum(), fm2.getNum());
assertEquals(fm2.getStringValue(), "testBeanOnlyPrototypeDISetterString");
assertEquals(fm2.getStringValue(), fm2.getStringValue());
// The TestBean reference is resolved to a prototype in the factory
assertSame(fm2.getTestBean(), fm2.getTestBean());
assertNotSame(fm1, fm2);
}
public void testCannotSpecifyFactoryMethodArgumentsOnSingleton() {
DefaultListableBeanFactory xbf = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf);
reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_AUTO);
reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass()));
try {
xbf.getBean("testBeanOnly", new Object[]{new TestBean()});
fail("Shouldn't allow args to be passed to a singleton");
}
catch (BeanDefinitionStoreException ex) {
// OK
}
}
public void testFactoryMethodWithDifferentReturnType() {
DefaultListableBeanFactory xbf = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf);
reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_AUTO);
reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass()));
// Check that listInstance is not considered a bean of type FactoryMethods.
assertTrue(List.class.isAssignableFrom(xbf.getType("listInstance")));
String[] names = xbf.getBeanNamesForType(FactoryMethods.class);
assertTrue(!Arrays.asList(names).contains("listInstance"));
names = xbf.getBeanNamesForType(List.class);
assertTrue(Arrays.asList(names).contains("listInstance"));
xbf.preInstantiateSingletons();
assertTrue(List.class.isAssignableFrom(xbf.getType("listInstance")));
names = xbf.getBeanNamesForType(FactoryMethods.class);
assertTrue(!Arrays.asList(names).contains("listInstance"));
names = xbf.getBeanNamesForType(List.class);
assertTrue(Arrays.asList(names).contains("listInstance"));
List list = (List) xbf.getBean("listInstance");
assertEquals(Collections.EMPTY_LIST, list);
}
public void testFactoryMethodForJavaMailSession() {
DefaultListableBeanFactory xbf = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf);
reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_AUTO);
reader.loadBeanDefinitions(new ClassPathResource("factory-methods.xml", getClass()));
Session session = (Session) xbf.getBean("javaMailSession");
assertEquals("someuser", session.getProperty("mail.smtp.user"));
assertEquals("somepw", session.getProperty("mail.smtp.password"));
}
public void testCannotSpecifyFactoryMethodArgumentsExceptWithFactoryMethod() {
DefaultListableBeanFactory xbf = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf);
reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_AUTO);
reader.loadBeanDefinitions(new ClassPathResource("overrides.xml", getClass()));
try {
xbf.getBean("overrideOnPrototype", new Object[]{new TestBean()});
fail("Shouldn't allow args to be passed to a Setter-Injected object");
}
catch (BeanDefinitionStoreException ex) {
// OK
}
}
public void testConstructorArgWithSingleSimpleTypeMatch() {
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("constructor-arg.xml", getClass()));
SingleSimpleTypeConstructorBean bean = (SingleSimpleTypeConstructorBean) xbf.getBean("beanWithBoolean");
assertTrue(bean.isSingleBoolean());
SingleSimpleTypeConstructorBean bean2 = (SingleSimpleTypeConstructorBean) xbf.getBean("beanWithBoolean2");
assertTrue(bean2.isSingleBoolean());
}
public void testConstructorArgWithDoubleSimpleTypeMatch() {
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("constructor-arg.xml", getClass()));
SingleSimpleTypeConstructorBean bean = (SingleSimpleTypeConstructorBean) xbf.getBean("beanWithBooleanAndString");
assertTrue(bean.isSecondBoolean());
assertEquals("A String", bean.getTestString());
SingleSimpleTypeConstructorBean bean2 = (SingleSimpleTypeConstructorBean) xbf.getBean("beanWithBooleanAndString2");
assertTrue(bean2.isSecondBoolean());
assertEquals("A String", bean2.getTestString());
}
public void testDoubleBooleanAutowire() {
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("constructor-arg.xml", getClass()));
DoubleBooleanConstructorBean bean = (DoubleBooleanConstructorBean) xbf.getBean("beanWithDoubleBoolean");
assertEquals(Boolean.TRUE, bean.boolean1);
assertEquals(Boolean.FALSE, bean.boolean2);
}
public void testDoubleBooleanAutowireWithIndex() {
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("constructor-arg.xml", getClass()));
DoubleBooleanConstructorBean bean = (DoubleBooleanConstructorBean) xbf.getBean("beanWithDoubleBooleanAndIndex");
assertEquals(Boolean.FALSE, bean.boolean1);
assertEquals(Boolean.TRUE, bean.boolean2);
}
public void testWithDuplicateName() throws Exception {
try {
new XmlBeanFactory(new ClassPathResource("testWithDuplicateNames.xml", getClass()));
fail("Duplicate name not detected");
}
catch (BeansException e) {
assertTrue(e.getMessage().indexOf("Bean name 'foo'") > -1);
}
}
public void testWithDuplicateNameInAlias() throws Exception {
try {
new XmlBeanFactory(new ClassPathResource("testWithDuplicateNameInAlias.xml", getClass()));
fail("Duplicate name not detected");
}
catch (BeansException e) {
assertTrue(e.getMessage().indexOf("Bean name 'foo'") > -1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -