java - Hazelcast addItemListener 与弹簧自动装配
问题描述
我正在尝试创建一个带有监听器的 hazelcast-spring 应用程序,但目前没有成功。当我尝试自动连接时,我UserListener
的 is null
。
HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();
IQueue<Object> queue1 = hazelcastInstance.getQueue("q");
queue1.addItemListener(new UserListener(), true);
}
这是我的主要方法,当我使用 UserListener 类的新实例(我的侦听器)添加项目侦听器时它工作正常,但我需要使用 spring autowired 注释,因为在侦听器中我有 service->dao 并且我希望一切都是autowired.Any 想法我怎么能做到这一点?这是我的整个代码:
主类:
public static void main(String[] args) {
HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();
IQueue<Object> queue1 = hazelcastInstance.getQueue("q");
queue1.addItemListener(new UserListener(), true);
}
监听类:
@Component
public class UserListener implements ItemListener<Object> {
@Autowired
private UserService userService;
public void itemAdded(ItemEvent<Object> arg0) {
if (arg0 != null) {
try {
userService.process(arg0);
} catch (SQLException e) {
e.printStackTrace();
}
} else {
System.out.println("null");
}
}
public void itemRemoved(ItemEvent<Object> item) {
System.out.println("The item is removed succesfully");
}
}
POM.xml
<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>hazelcastServer</groupId>
<artifactId>hazelcastServer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast</artifactId>
<version>3.12.9</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
</dependencies>
</project>
解决方案
这部分代码
queue1.addItemListener(new UserListener(), true);
绕过 Spring 创建一个新的 UserListener 对象,因此注释为的任何字段@Autowired
都不会被实例化。
你需要尝试
UserListener userListener = applicationContext.getBean(UserListener.class)
queue1.addItemListener(userListener, true);
检查 object 是否为 null 可能是值得的userListener
,因为它可能是 Spring 组件扫描没有找到你的类并创建了一个 @Bean,因为组件扫描可以选择它扫描的包。
推荐阅读
- testing - Ember JS 测试 - 工厂人
- mongodb - 如何将isodate的mongodb日期字段转换为本地日期
- flutter - 不包含脚手架错误。我知道我的方法没有脚手架方法,但它是具有脚手架的方法的子方法
- java - 如何简化这段代码?
- r - 我可以将一个 PCA 的变量坐标覆盖在来自第二个 PCA 的个人坐标上并仍然解释结果吗?
- angular - 部署到 AWS 服务器后,Angular 4/5 中仅加载默认 url 组件
- asp.net - SSRS 日期参数允许 Nulls 但启用日期选择器
- powershell - 如何找到没有设置密码的AD用户?
- database - Liquibase 存储过程
- google-maps-api-3 - 使标记不可从地图选项中拖动