• (报错解决)No bean class specified on bean definition


    关键词

    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

  • 相关阅读:
    ATA/SATA/SCSI/SAS/FC总线简介
    RAID卡
    解读Gartner《2015年度新兴技术成熟度曲线报告》
    linux 下 取进程占用内存(MEM)最高的前10个进程
    网站用域名能访问,用域名IP不能访问的原因分析
    iis7下iis安全狗不能用怎么办(安装iis6兼容性)
    4M宽带一般最大的下载速度是多少?
    U盘安装操作系统
    windows7实现打印机共享的方法
    windows7系统下如何安装windows xp系统(无法识别硬盘,删除隐藏分区)
  • 原文地址:https://www.cnblogs.com/zyaire/p/javaweb.html
Copyright © 2020-2023  润新知