1.如果希望为静态内部类配置bean定义,则必须使用内部类的二进制名。
例如,如果你的com.example包中有一个类名为Outer。这个类有一个静态的内部类叫做Inner, 则bean定义上的class属性的值是com.example.Outer$Inner, 注意,在名称中使用$字符将内部的类名与外部类名分隔开.
Outer.java
package chending;
/**
* @Description:
* @author: chenDing
* @date: 2020/2/28 20:50
*/
public class Outer {
public Outer() {
System.out.println("Outer对象被创建了");
}
public static class Inner {
public Inner() {
System.out.println("Inner 对象被创建了");
}
}
}
beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="inner" class="chending.Outer$Inner"/>
</beans>
TestDemo.java
package chending.dao;
import chending.Outer;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @Description:
* @author: chenDing
* @date: 2020/2/28 20:53
*/
public class TestDemo {
@Test
public void testDemo() {
ClassPathXmlApplicationContext cpa = new ClassPathXmlApplicationContext("beans.xml");
// Outer.Inner inner = (Outer.Inner)cpa.getBean("inner");
Outer.Inner inner = cpa.getBean("inner", Outer.Inner.class);
System.out.println(inner);
}
}
以上配置正确会得到如下结果:
Inner 对象被创建了
chending.Outer$Inner@9a7504c
Process finished with exit code 0