Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring中的注入值始终为空_Java_Spring_Spring El - Fatal编程技术网

Java Spring中的注入值始终为空

Java Spring中的注入值始终为空,java,spring,spring-el,Java,Spring,Spring El,我遵循这一点,但当尝试运行应用程序时,它会使用此错误堆栈运行 Jul 18, 2014 3:45:23 AM org.springframework.context.support.FileSystemXmlApplicationContext prepareRefresh INFO: Refreshing org.springframework.context.support.FileSystemXmlApplicationContext@1f2f0ce9: display name

我遵循这一点,但当尝试运行应用程序时,它会使用此错误堆栈运行

    Jul 18, 2014 3:45:23 AM org.springframework.context.support.FileSystemXmlApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.FileSystemXmlApplicationContext@1f2f0ce9: display name [org.springframework.context.support.FileSystemXmlApplicationContext@1f2f0ce9]; startup date [Fri Jul 18 03:45:23 EEST 2014]; root of context hierarchy
Jul 18, 2014 3:45:23 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from file [C:\Users\Yasha\workspace3\Test\spring-beans.xml]
Jul 18, 2014 3:45:23 AM org.springframework.context.support.FileSystemXmlApplicationContext obtainFreshBeanFactory
INFO: Bean factory for application context [org.springframework.context.support.FileSystemXmlApplicationContext@1f2f0ce9]: org.springframework.beans.factory.support.DefaultListableBeanFactory@1ba22e94
Jul 18, 2014 3:45:23 AM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1ba22e94: defining beans [itemBean,customerBean]; root of factory hierarchy
Jul 18, 2014 3:45:24 AM org.springframework.beans.factory.support.DefaultListableBeanFactory destroySingletons
INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1ba22e94: defining beans [itemBean,customerBean]; root of factory hierarchy
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customerBean' defined in file [C:\Users\Yasha\workspace3\Test\spring-beans.xml]: Cannot resolve reference to bean '#{itemBean}' while setting bean property 'item'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named '#{itemBean}' is defined
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1245)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
    at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:140)
    at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:84)
    at SpringEl.app.main(app.java:8)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named '#{itemBean}' is defined
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:387)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:971)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:246)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269)
    ... 18 more
Item.java:

包装弹簧

public class Customer {

    private Item item;

    private String itemName;

    public Item getItem() {
        return item;
    }

    public void setItem(Item item) {
        this.item = item;
    }

    public String getItemName() {
        return itemName;
    }

    public void setItemName(String itemName) {
        this.itemName = itemName;
    }

    @Override
    public String toString() {
        return "Customer [item=" + item + ", itemName=" + itemName + "]";
    }

}
public class Item {

    private String name;

    private int qty;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getQty() {
        return qty;
    }

    public void setQty(int qty) {
        this.qty = qty;
    }
}
最后是我的主课

app.java

   public class app {
        public static void main(String[] args) {
            ApplicationContext context = new FileSystemXmlApplicationContext("spring-beans.xml");


        Customer obj = (Customer) context.getBean("customerBean");
        System.out.println(obj);
    }
}

确保在
pom.xml
文件中正确指定了
spring上下文
依赖项。以下是一个例子:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.stack.overflow</groupId>
    <artifactId>example</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>example</name>
    <description>example</description>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.0.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.0.6.RELEASE</version>
        </dependency>
    </dependencies>
</project>

4.0.0
com.stack.overflow
例子
0.0.1-快照
例子
例子
org.springframework
弹簧芯
4.0.6.1发布
org.springframework
spring上下文
4.0.6.1发布
spring上下文
依赖项对
spring表达式
工件有自己的依赖项,基本上就是spring EL

我的直觉是Spring EL没有被放在类路径上。因此,当SpringIoC容器开始读取
springbean.xml
配置文件时,它不会解析表达式
{itemBean}
,而是将表达式视为字符串文本。这会导致问题,因为
customerBean
bean上的
item
属性需要一种
SpringEl.item
类型,而不是
String


修复
pom.xml
文件中的依赖关系将把Spring EL放在类路径上,并允许正确解析表达式,最终用正确类型的bean来满足依赖关系。

感谢您在我这样做之后给出的快速答案,itemName没有解析,而是得到了“ItemA”“#{itemBean.name}“是的,关于spring-beans.xml,这在我的代码中是正确的,这一定是一个错误copying@user3135757您的pom文件中是否有Spring上下文?yep org.springframework Spring Context 4.0.6.RELEASE@user3135757我打赌这是对早期版本Spring的依赖,它指定了
org.springframeworkspring2.5.6.SEC03
您不希望旧版本出现在类路径上。这同样适用于旧版本的
SpringWeb
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.stack.overflow</groupId>
    <artifactId>example</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>example</name>
    <description>example</description>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.0.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.0.6.RELEASE</version>
        </dependency>
    </dependencies>
</project>