Не могу получить значение поля при помощи SpEL

187
23 июля 2018, 22:50

При изучении spring'а решил реализовать пример из книги. Суть такова: есть класс с инициализированными полями. Есть класс с аналогичными пустыми полями и точкой входа. Есть конфигурационный xml-файл, которому с помощью языка SpEL передаётся значение поля name. Потом класс с точкой входа принимает значение этого поля и выводит на экран. При запуске выдаёт такие ошибки:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'injectSimple' defined in class path resource [SPeL_Testing/spel-config-xml.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanExpressionException: Expression parsing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'SPeL_Testing' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext' - maybe not public or not valid?
Caused by: org.springframework.beans.factory.BeanExpressionException: Expression parsing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'SPeL_Testing' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext' - maybe not public or not valid?
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'SPeL_Testing' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext' - maybe not public or not valid?

Main.class:

public class Main {
public String name;
public int age;
public float height;
public boolean programmer;
public Long ageinSeconds;
public static void main(String[] args) {
    GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
    ctx.load("match-arguments.xml");
    ctx.refresh();
    Main simple = (Main) ctx.getBean("injectSimple");
    System.out.println(simple);

}
public String toString() {
    return "Name : " + name + "\n"
            + "Age:" + age + "\n"
            + "Age in Seconds: " + ageinSeconds + "\n"
            + "Height: " + height + "\n"
            + "Is Programmer?: " + programmer;
  }
}

InjectSimpleSpel.class:

    public class InjectSimpleSpel {
    public String name="Chris Schaefer";
    public int age=32;
    public float height=1.778f;
    public boolean programmer=true;
    public Long ageInSeconds=1009843200L;
    }

spel-config-xml.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"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="injectSimple" class="SpEL.Main"
          p:name="#{SPeL_Testing.InjectSimpleSpel.name}"
          p:age="32"
          p:height="1.778"
          p:programmer="true"
          p:ageInSeconds="1009843200"/>
</beans>

Что делать?

Answer 1

Я так полагаю SPeL_Testing - это наименование твоего пакета, в котором находится класс InjectSimpleSpel , но лучше бы было разъяснить этот момент в вопросе. Из этого, я предполагаю, что ты хочешь обратиться к статической переменной класса. Поэтому замени

#{SPeL_Testing.InjectSimpleSpel.name}

на

#{T(SPeL_Testing.InjectSimpleSpel).name}

P.S. в java по негласному соглашению имена пакетов не должны содержать заглавных букв и знаков подчеркивания.

READ ALSO
Java что располагается внутри фигурных скобок

Java что располагается внутри фигурных скобок

Встретил вот такой интересный участок кода, но ничего не могу про него найти:

217
Не удаляется объект при связи @OneToMany Java Hibernate

Не удаляется объект при связи @OneToMany Java Hibernate

Не могу понять в чем может быть ошибка при удалении

201
Проблема получение данных с сайта

Проблема получение данных с сайта

Занимаюсь получением http запроса, я вроде как пробился на сайт, но получаю след ошибки:

197