zoukankan      html  css  js  c++  java
  • (报错解决)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

  • 相关阅读:
    资源: StaticResource, ThemeResource
    资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件
    绘图: Shape, Path
    绘图: Stroke, Brush
    动画: 线性动画, 关键帧动画
    动画: 缓动动画
    动画: ThemeAnimation(主题动画)
    动画: ThemeTransition(过渡效果)
    绑定: 与 Element 绑定, 与 Indexer 绑定, TargetNullValue, FallbackValue
    BeautifulSoup在Windows下安装(running 2to3)
  • 原文地址:https://www.cnblogs.com/zyaire/p/javaweb.html
Copyright © 2011-2022 走看看