- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个 TCP 套接字服务器,它使用 Spring Framework (3.2.3.RELEASE) 将事物连接在一起。
一切都是使用带有注释的 Java Config 进行配置的。在 Java 配置中,我有一个 @ComponentScan
注释来扫描类路径中的组件。
当 TCP 套接字服务器接收到消息时,我偶尔想要调度一些事件。为此,我使用 Google Guice EventBus。我不希望 TCP 套接字服务器了解事件接收器,反之亦然,以保持松散耦合。
我已经根据 Patrick Meade @ http://pmeade.blogspot.no/2013/02/using-guava-eventbus-with-spring-part-2.html 提供的代码注册了一个 EventBusRegisterBeanPostProcessor
这将扫描任何 bean 并将其注册到 EventBus。
要监听事件(订阅),我只需要创建一个如下所示的 POJO:
@Component
public class PingMessageReceivedHandler {
static Logger logger = Logger.getLogger(PingMessageReceivedHandler.class);
@Subscribe
public void handleMessageReceivedEvent(MessageReceivedEvent messageReceivedEvent) {
logger.info(messageReceivedEvent.getMessage());
messageReceivedEvent.getChannel().writeAndFlush(new BaseMessage(false, "Pong", null, ""));
}
}
现在,问题是:除非我在不同的服务或组件或其他任何地方的某个地方依赖于 PingMessageReceivedHandler
(例如使用 @ Autowired
),那么 EventBusRegisterBeanPostProcessor
将无法识别 PingMessageReceivedHandler
,因此不会向其分派(dispatch)消息。
我知道 Spring 知道 PingMessageReceivedHandler
的存在,日志状态如下:
2013-11-04 17:35:05,391 INFO [main] (DefaultListableBeanFactory.java:596) - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@9695ed7: defining beans [[...],pingMessageReceivedHandler,[...],eventBusRegisterBeanPostProcessor]; root of factory hierarchy
对于造成这种情况的原因有什么想法,更重要的是,我如何解决它?
编辑:上下文配置:
@ComponentScan(value = "com.company.product")
@Configuration
public class DeviceManagerServerConfig {
@Bean
public static EventBusRegisterBeanPostProcessor eventBusRegisterBeanPostProcessor() {
return new EventBusRegisterBeanPostProcessor();
}
@Bean
public EventBus eventBus() {
return new EventBus("standard");
}
}
它的初始化使用:
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.register(DeviceManagerServerConfig.class);
context.refresh();
最佳答案
问题是我试图初始化一个具有阻塞操作的 bean(TCP 套接字服务器)。
这阻止了 Spring 进一步的 bean 初始化,并导致了原始帖子中的问题。
即:
@Component
@Profile("default")
public class SocketServerImpl implements SocketServer {
/**
* Instantiates a new socket server.
*/
public SocketServerImpl() {
/* Standard stuff */
}
@PostConstruct
@Override
public void start() {
/* This would block any further progressing */
}
}
我的修复非常简单,我从上面的代码中删除了 @PostConstruct
,并在我调用 context.refresh( )
,我调用了context.getBean(SocketServer.class).start()
。
关于java - 除非存在 @autowired 依赖项,否则 Spring 框架不会调用 BeanPostProcessor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19772764/
我试图理解静态初始化、实例初始化、InitializingBean 和 BeanPostProcessor 的顺序,所以我创建了下面的示例,除了 BeanPostProcessor 没有被调用之外,一
使用 BeanPostProcessor 时出现问题。错误日志显示,productFactory 类中缺少方法 josh(),但该类确实有这样的方法,而且它是非静态的。下面是代码片段。 web.xml
这是我的 config.xml 我知道在使用组件扫描时,分配给 bean 的默认范围是“单例”,除非在 xml 配置中另行指定或使用注释 @
我知道 spring BeanPostProcessor 是如何工作的,但我确实没有得到任何 BeanPostProcessor 可能非常有帮助的场景。如果有人在他/她的应用程序中实现了 BeanPo
我试图理解 Spring 中的 BeanPostProcessor,但我不明白它的作用。 BeanPostProcessor 定义了在这些点调用的两个方法是否正确: 在初始化之前(init 方法或 a
我正在将 Spring 与 Spring Boot BOM 2.4.0 附带的遗留 Tomcat 应用程序(不是 Spring Boot)一起使用,问题类似于 Spring Expression La
我正在编写一个简单的函数,通过从 BeanPostProcessor 创建一个代理来记录 @Metric 注释的方法的性能: 公制.java @Retention(RUNTIME) @Target({
我有很多千篇一律的 spring bean,不想在 xml 中显式定义每一个。所以我去了让我这样做的组件扫描路线。这很好,但我刚刚意识到 MyBeanPostProcessor 没有被调用用于使用组件
在 Maven 中设置 Spring + Spring Data JPA + QueryDSL + JPA 2.0 + Hibernate 的配置时遇到了很多麻烦。我已经解决了很多问题,但是这个让我很
我正在学习 Spring Core 认证,我对 Spring 如何处理 bean 生命周期,尤其是 bean 后处理器有一些疑问。 所以我有这个架构: 我很清楚这意味着什么: 以下步骤发生在加载 Be
为了弄清楚Spring框架,我们需要分别弄清楚相关核心接口的作用,本文来介绍下BeanPostProcessor接口 BeanPostProcessor 该接口我们也叫后置处理器
我正在制作一个简单的程序来测试 bean 后处理器,但收到 NullPointerException。这是我写的代码 人员类别: public class Person { private Strin
我知道 bean 后处理器并且它正在工作,但我不确定它将如何帮助我们进行实际应用。在实际应用中下面的 define 方法中应该有什么? 1 Some configuration Code? 2 Som
使用 Spring 可以将 BeanPostProcessor 实现添加到上下文中,以便在使用依赖项初始化 bean 之前和之后有条件地替换、包装或代理 bean。 Google Guice 是否提供
我目前是 Spring 的新手。我试图遵循调用 PostConstruct 和 BeanPostProcessor 的顺序。 根据我的了解,以下是顺序:- BPP -> postProcessBefo
我试图了解 BeanFactoryPostProcessor 和 BeanPostProcessor 之间的区别。 我知道 BeanFactoryPostProcessor 对 bean 定义进行操作
我正在尝试创建一个 BeanPostProcessor 来将一些值注册到 Map。 如果我通过 xml 定义创建 bean 实例,BeanPostProcessor 工作正常,但如果我将 bean 定
我有一个实现 springs BeanPostProcessor 的类 A public class A implements BeanPostProcessor { private B b;
我正在尝试实现我自己的 BeanPostProcessor 实现。 @Component public class UserDetailsProcessor implements BeanPostPr
我正在执行 BeanPostProcessor 实现。我的 Bean 后处理器执行了 3 次。我在 init 方法之前额外调用了 2 次后处理器。我无法找到它发生的原因。请帮助我。 我的代码和配置文件
我是一名优秀的程序员,十分优秀!