关键词
spring Java eclipse bean 多例模式 prototype 懒加载 lazy-init
写在前面
- 功能简述:对于多例模式的懒加载配置是否生效的测试。
- 刚接触,摸索中,低级错误,只是做个记录,轻喷。
(有错误)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="myFactoryPrototypeExample" class="instance.BeanInstanceFactory"
scope="prototype" lazy-init="false"/>
<bean id="instanceFactoryInstancePrototypeExample" factory-bean="myFactoryPrototypeExample"
scope="prototype" lazy-init="false"/>
</beans>
运行的测试代码
package test;
import java.util.Calendar;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import instance.BeanClass;
import instance.Person;
import instance.User;
public class TestInstance {
//对于多例模式,默认懒加载,即便设置lazy-init="false"也无效
@Test
public void test06(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
System.out.println("获取对象前");
//参数是xml中待创建的对象的id
BeanClass bc3 = (BeanClass)context.getBean("instanceFactoryInstancePrototypeExample");
System.out.println(bc3+bc3.message);
}
}
解决
- 思路:检查xml配置文件
- 原因:xml配置文件有误。
- 解决:最后一个bean标签少写了factory-method属性。
(正确的)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="myFactoryPrototypeExample" class="instance.BeanInstanceFactory"
scope="prototype" lazy-init="false"/>
<!--下面这里少写了factory-method-->
<bean id="instanceFactoryInstancePrototypeExample" factory-bean="myFactoryPrototypeExample"
factory-method="createBeanClassInstance" scope="prototype" lazy-init="false"/>
</beans>
包结构
(补充)BeanInstanceFactory类
package instance;
public class BeanInstanceFactory {
public BeanInstanceFactory(){
System.out.println("我是一个实例工厂");
}
public BeanClass createBeanClassInstance(){
return new BeanClass("调用实例工厂方法实例化Bean");
}
}
(补充)BeanClass类
package instance;
public class BeanClass {
public String message;
public BeanClass() {
this.message = "构造方法实例化Bean";
}
public BeanClass(String message) {
this.message = message;
}
}
运行结果
参考
org.springframework.beans.factory.BeanCreationException:No bean class specified on bean definition
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。