Spring @Autowired имеет значение null для аннотированных beans

Я пытаюсь создать веб-приложение с удаленными службами Spring.

Само удаленное взаимодействие работает корректно, однако, если я хочу автоматически подключить компонент к удаленной службе, поле останется пустым, несмотря ни на что.

Бин, который я хочу подключить к другому, также удален, и он отлично работает (это просто helloworld, поэтому там нет CDI).

мой context.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:context = "http://www.springframework.org/schema/context"
       xmlns:tx = "http://www.springframework.org/schema/tx"
       xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.springframework.org/schema/context https://www.springframework.org/context/spring-context.xsd
                        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

<context:annotation-config />
<context:component-scan base-package = "hu.bme.sch.qpa" annotation-config = "true"/>

<bean id = "sessionFactory"
      class = "org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name = "dataSource"
              ref = "dataSource"/>
    <property name = "packagesToScan"
              value = "hu.bme.sch.qpa.global.entities"/>
    <property name = "hibernateProperties">
        <props>
            <prop key = "hibernate.hbm2ddl.auto">
                update
            </prop>
            <prop key = "hibernate.dialect">
                org.hibernate.dialect.PostgreSQL95Dialect
            </prop>
        </props>
    </property>
</bean>

<bean id = "dataSource"
      class = "org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name = "driverClassName" value = "org.postgresql.Driver"/>
    <property name = "url" value = "jdbc:postgresql://localhost:5432/test"/>
    <property name = "username" value = "qpapp_server_user"/>
    <property name = "password" value = "root"/>
</bean>

<bean id = "txManager"
      class = "org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name = "sessionFactory" ref = "sessionFactory"/>
</bean>
<tx:annotation-driven/>

<bean id = "persistenceExceptionTranslationPostProcessor" class=
        "org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

Рассматриваемый bean-компонент:

package hu.bme.sch.qpa.services;

import hu.bme.sch.qpa.global.entities.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service(Persistence.NAME)

public class PersistenceBean implements Persistence {

@Qualifier(HelloWorld.NAME)
@Autowired
private HelloWorld helloWorld;

@Override
public User getUser() {
    User user = new User();
    user.setEmail(helloWorld.getText());
    return user;
    }
}

Таким образом, я могу получить доступ к функции getUser из клиентского сервлета, однако поле helloWorld имеет значение null и, следовательно, не работает.

У вас есть класс Helloworld внутри пакета hu.bme.sch.qpa? Почему он не импортируется в рассматриваемый класс?

Steephen 21.05.2018 01:40

Если это новое приложение, пропустите все устаревшие части и используйте Spring Boot. Кроме того, используйте внедрение конструктора вместо внедрения поля.

chrylis -cautiouslyoptimistic- 21.05.2018 01:55

Я не включил его, потому что это действительно простой сервис helloworld с одной функцией, которая возвращает очень простую строку. Это аннотировано, если в этом вопрос

László Stahorszki 21.05.2018 03:22

Кроме того, этот вопрос не является дубликатом связанного, потому что парень в другом вопросе создал экземпляр bean-компонента вручную, что здесь не так.

László Stahorszki 21.05.2018 03:23
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
37
0

Другие вопросы по теме