Я пытаюсь создать веб-приложение с удаленными службами 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 и, следовательно, не работает.
Если это новое приложение, пропустите все устаревшие части и используйте Spring Boot. Кроме того, используйте внедрение конструктора вместо внедрения поля.
Я не включил его, потому что это действительно простой сервис helloworld с одной функцией, которая возвращает очень простую строку. Это аннотировано, если в этом вопрос
Кроме того, этот вопрос не является дубликатом связанного, потому что парень в другом вопросе создал экземпляр bean-компонента вручную, что здесь не так.




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