📄 xmlbeanfactorytests.java
字号:
}
public void testAutowireByConstructor() throws Exception {
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("constructor-arg.xml", getClass()));
ConstructorDependenciesBean rod1 = (ConstructorDependenciesBean) xbf.getBean("rod1");
TestBean kerry = (TestBean) xbf.getBean("kerry2");
// should have been autowired
assertEquals(kerry, rod1.getSpouse1());
assertEquals(0, rod1.getAge());
assertEquals(null, rod1.getName());
ConstructorDependenciesBean rod2 = (ConstructorDependenciesBean) xbf.getBean("rod2");
TestBean kerry1 = (TestBean) xbf.getBean("kerry1");
TestBean kerry2 = (TestBean) xbf.getBean("kerry2");
// should have been autowired
assertEquals(kerry2, rod2.getSpouse1());
assertEquals(kerry1, rod2.getSpouse2());
assertEquals(0, rod2.getAge());
assertEquals(null, rod2.getName());
ConstructorDependenciesBean rod = (ConstructorDependenciesBean) xbf.getBean("rod3");
IndexedTestBean other = (IndexedTestBean) xbf.getBean("other");
// should have been autowired
assertEquals(kerry, rod.getSpouse1());
assertEquals(kerry, rod.getSpouse2());
assertEquals(other, rod.getOther());
assertEquals(0, rod.getAge());
assertEquals(null, rod.getName());
ConstructorDependenciesBean rod4 = (ConstructorDependenciesBean) xbf.getBean("rod4");
// should have been autowired
assertEquals(kerry, rod.getSpouse1());
assertEquals(kerry, rod.getSpouse2());
assertEquals(other, rod.getOther());
assertEquals(0, rod.getAge());
assertEquals(null, rod.getName());
}
public void testAutowireByConstructorWithSimpleValues() throws Exception {
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("constructor-arg.xml", getClass()));
ConstructorDependenciesBean rod5 = (ConstructorDependenciesBean) xbf.getBean("rod5");
TestBean kerry1 = (TestBean) xbf.getBean("kerry1");
TestBean kerry2 = (TestBean) xbf.getBean("kerry2");
IndexedTestBean other = (IndexedTestBean) xbf.getBean("other");
// should have been autowired
assertEquals(kerry2, rod5.getSpouse1());
assertEquals(kerry1, rod5.getSpouse2());
assertEquals(other, rod5.getOther());
assertEquals(99, rod5.getAge());
assertEquals("myname", rod5.getName());
DerivedConstructorDependenciesBean rod6 = (DerivedConstructorDependenciesBean) xbf.getBean("rod6");
// should have been autowired
assertTrue(rod6.initialized);
assertTrue(!rod6.destroyed);
assertEquals(kerry2, rod6.getSpouse1());
assertEquals(kerry1, rod6.getSpouse2());
assertEquals(other, rod6.getOther());
assertEquals(0, rod6.getAge());
assertEquals(null, rod6.getName());
xbf.destroySingletons();
assertTrue(rod6.destroyed);
}
public void testConstructorArgResolution() {
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("constructor-arg.xml", getClass()));
TestBean kerry1 = (TestBean) xbf.getBean("kerry1");
TestBean kerry2 = (TestBean) xbf.getBean("kerry2");
//ConstructorDependenciesBean rod9 = (ConstructorDependenciesBean) xbf.getBean("rod9");
//assertEquals(99, rod9.getAge());
ConstructorDependenciesBean rod10 = (ConstructorDependenciesBean) xbf.getBean("rod10");
assertEquals(null, rod10.getName());
ConstructorDependenciesBean rod11 = (ConstructorDependenciesBean) xbf.getBean("rod11");
assertEquals(kerry2, rod11.getSpouse1());
ConstructorDependenciesBean rod12 = (ConstructorDependenciesBean) xbf.getBean("rod12");
assertEquals(kerry1, rod12.getSpouse1());
assertNull(rod12.getSpouse2());
ConstructorDependenciesBean rod13 = (ConstructorDependenciesBean) xbf.getBean("rod13");
assertEquals(kerry1, rod13.getSpouse1());
assertEquals(kerry2, rod13.getSpouse2());
ConstructorDependenciesBean rod14 = (ConstructorDependenciesBean) xbf.getBean("rod14");
assertEquals(kerry1, rod14.getSpouse1());
assertEquals(kerry2, rod14.getSpouse2());
ConstructorDependenciesBean rod15 = (ConstructorDependenciesBean) xbf.getBean("rod15");
assertEquals(kerry2, rod15.getSpouse1());
assertEquals(kerry1, rod15.getSpouse2());
ConstructorDependenciesBean rod16 = (ConstructorDependenciesBean) xbf.getBean("rod16");
assertEquals(kerry2, rod16.getSpouse1());
assertEquals(kerry1, rod16.getSpouse2());
assertEquals(29, rod16.getAge());
}
public void testConstructorArgWithSingleMatch() {
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("constructor-arg.xml", getClass()));
File file = (File) xbf.getBean("file");
assertEquals(File.separator + "test", file.getPath());
}
public void testThrowsExceptionOnTooManyArguments() throws Exception {
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("constructor-arg.xml", getClass()));
try {
ConstructorDependenciesBean rod = (ConstructorDependenciesBean) xbf.getBean("rod7");
fail("Should have thrown BeanDefinitionStoreException");
}
catch (BeanCreationException ex) {
// expected
}
}
public void testThrowsExceptionOnAmbiguousResolution() throws Exception {
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("constructor-arg.xml", getClass()));
try {
ConstructorDependenciesBean rod = (ConstructorDependenciesBean) xbf.getBean("rod8");
fail("Should have thrown UnsatisfiedDependencyException");
}
catch (UnsatisfiedDependencyException ex) {
// expected
}
}
public void testFactoryBeanDefinedAsPrototype() {
try {
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("invalid-factory.xml", getClass()));
fail("Should have thrown BeanDefinitionStoreException");
}
catch (BeanDefinitionStoreException ex) {
// expected
}
}
public void testDependsOn() {
doTestDependencies("dependencies-dependsOn.xml");
}
public void testDependsOnInInnerBean() {
doTestDependencies("dependencies-dependsOn-inner.xml");
}
public void testDependenciesThroughConstructorArguments() {
doTestDependencies("dependencies-carg.xml");
}
public void testDependenciesThroughConstructorArgumentAutowiring() {
doTestDependencies("dependencies-carg-autowire.xml");
}
public void testDependenciesThroughConstructorArgumentsInInnerBean() {
doTestDependencies("dependencies-carg-inner.xml");
}
public void testDependenciesThroughProperties() {
doTestDependencies("dependencies-prop.xml");
}
public void testDependenciesThroughPropertiesWithInTheMiddle() {
doTestDependencies("dependencies-prop-inTheMiddle.xml");
}
public void testDependenciesThroughPropertyAutowiringByName() {
doTestDependencies("dependencies-prop-autowireByName.xml");
}
public void testDependenciesThroughPropertyAutowiringByType() {
doTestDependencies("dependencies-prop-autowireByType.xml");
}
public void testDependenciesThroughPropertiesInInnerBean() {
doTestDependencies("dependencies-prop-inner.xml");
}
private void doTestDependencies(String filename) {
PreparingBean1.prepared = false;
PreparingBean1.destroyed = false;
PreparingBean2.prepared = false;
PreparingBean2.destroyed = false;
DependingBean.destroyed = false;
HoldingBean.destroyed = false;
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource(filename, getClass()));
xbf.preInstantiateSingletons();
xbf.destroySingletons();
assertTrue(PreparingBean1.prepared);
assertTrue(PreparingBean1.destroyed);
assertTrue(PreparingBean2.prepared);
assertTrue(PreparingBean2.destroyed);
assertTrue(DependingBean.destroyed);
if (xbf.containsBean("holdingBean")) {
assertTrue(HoldingBean.destroyed);
}
}
public void testClassNotFoundWithDefault() {
try {
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("classNotFound.xml", getClass()));
// should have thrown BeanDefinitionStoreException
}
catch (BeanDefinitionStoreException ex) {
assertTrue(ex.getResourceDescription().indexOf("classNotFound.xml") != -1);
assertEquals("classNotFound", ex.getBeanName());
assertTrue(ex.getCause() instanceof ClassNotFoundException);
// expected
}
}
public void testClassNotFoundWithNoBeanClassLoader() {
try {
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(bf);
reader.setBeanClassLoader(null);
reader.loadBeanDefinitions(new ClassPathResource("classNotFound.xml", getClass()));
assertTrue(bf.getBeanDefinition("classNotFound") instanceof RootBeanDefinition);
assertEquals(((RootBeanDefinition) bf.getBeanDefinition("classNotFound")).getBeanClassName(),
"org.springframework.beans.TestBeana");
}
catch (BeanDefinitionStoreException ex) {
fail("Should not have thrown BeanDefinitionStoreException");
}
}
public void testResourceAndInputStream() throws IOException {
XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("resource.xml", getClass()));
// comes from "resourceImport.xml"
ResourceTestBean resource1 = (ResourceTestBean) xbf.getBean("resource1");
// comes from "resource.xml"
ResourceTestBean resource2 = (ResourceTestBean) xbf.getBean("resource2");
assertTrue(resource1.getResource() instanceof ClassPathResource);
StringWriter writer = new StringWriter();
FileCopyUtils.copy(new InputStreamReader(resource1.getResource().getInputStream()), writer);
assertEquals("test", writer.toString());
writer = new StringWriter();
FileCopyUtils.copy(new InputStreamReader(resource1.getInputStream()), writer);
assertEquals("test", writer.toString());
writer = new StringWriter();
FileCopyUtils.copy(new InputStreamReader(resource2.getResource().getInputStream()), writer);
assertEquals("test", writer.toString());
writer = new StringWriter();
FileCopyUtils.copy(new InputStreamReader(resource2.getInputStream()), writer);
assertEquals("test", writer.toString());
}
public void testClassPathResourceWithImport() {
XmlBeanFactory xbf = new XmlBeanFactory(
new ClassPathResource("org/springframework/beans/factory/xml/resource.xml"));
// comes from "resourceImport.xml"
ResourceTestBean resource1 = (ResourceTestBean) xbf.getBean("resource1");
// comes from "resource.xml"
ResourceTestBean resource2 = (ResourceTestBean) xbf.getBean("resource2");
}
public void testUrlResourceWithImport() {
URL url = getClass().getResource("resource.xml");
XmlBeanFactory xbf = new XmlBeanFactory(new UrlResource(url));
// comes from "resourceImport.xml"
ResourceTestBean resource1 = (ResourceTestBean) xbf.getBean("resource1");
// comes from "resource.xml"
ResourceTestBean resource2 = (ResourceTestBean) xbf.getBean("resource2");
}
public void testFileSystemResourceWithImport() {
String file = getClass().getResource("resource.xml").getFile();
XmlBeanFactory xbf = new XmlBeanFactory(new FileSystemResource(file));
// comes from "resourceImport.xml"
ResourceTestBean resource1 = (ResourceTestBean) xbf.getBean("resource1");
// comes from "resource.xml"
ResourceTestBean resource2 = (ResourceTestBean) xbf.getBean("resource2");
}
public void testLookupOverrideMethodsWithSetterInjection() {
DefaultListableBeanFactory xbf = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(xbf);
reader.setValidating(true);
reader.loadBeanDefinitions(new ClassPathResource("overrides.xml", getClass()));
testLookupOverrideMethodsWithSetterInjection(xbf, "overrideOneMethod", true);
// Should work identically on subclass definition, in which lookup
// methods are inherited
testLookupOverrideMethodsWithSetterInjection(xbf, "overrideInheritedMethod", true);
// Check cost of repeated construction of beans with method overrides
// Will pick up misuse of CGLIB
int howmany = 100;
StopWatch sw = new StopWatch();
sw.start("Look up " + howmany + " prototype bean instances with method overrides");
for (int i = 0; i < howmany; i++) {
testLookupOverrideMethodsWithSetterInjection(xbf, "overrideOnPrototype", false);
}
sw.stop();
System.out.println(sw);
if (!LogFactory.getLog(DefaultListableBeanFactory.class).isDebugEnabled()) {
assertTrue(sw.getTotalTimeMillis() < 1500);
}
// Now test distinct bean with swapped value in factory, to ensure the two are independent
OverrideOneMethod swappedOom = (OverrideOneMethod) xbf.getBean("overrideOneMethodSwappedReturnValues");
TestBean tb = swappedOom.getPrototypeDependency();
assertEquals("David", tb.getName());
tb = swappedOom.protectedOverrideSingleton();
assertEquals("Jenny", tb.getName());
}
private void testLookupOverrideMethodsWithSetterInjection(BeanFactory xbf, String beanName, boolean singleton) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -