-
Notifications
You must be signed in to change notification settings - Fork 0
Spring
Reactor provides out-of-the-box support for Spring ApplicationContexts by providing a BeanPostProcessor implementation that finds annotated beans and wires them into Reactors using SpEL and also provides some helper FactoryBean implementations for creating Reactor Environment and Reactor instances.
Since creating the initial Environment is a standard part of using Reactor in any application, reactor-spring provides a JavaConfig annotation that you put on your @Configuration bean to implicitly create an Environment based on the default properties file bootstrapping mechanism. You don’t have to create an Environment bean explicitly if you use @EnableReactor.
Using the @EnableReactor annotation also configures the BeanPostProcessor to post-process your beans that have methods annotated with the @Selector annotation. Here’s an example of a POJO bean definition that uses annotations to consume events published to a Reactor bean defined in the same ApplicationContext:
/**
* HandlerBean.java
*/
@Component
public class HandlerBean {
@Selector(value="test.topic", reactor="@rootReactor")
public void handleTestTopic(Event<String> evt) {
// handle the event
}
}
/**
* ReactorConfig.java
*/
@Configuration
@EnableReactor
@ComponentScan
public class ReactorConfig {
@Bean
public Reactor rootReactor(Environment env) {
// implicit Environment is injected into bean def method
return Reactors.reactor().env(env).get();
}
}
Any other components who also have the same Reactor injected into them can publish events to it, while the POJO handler beans can handle the events.
@Service
public class TestService {
@Autowired
private Reactor rootReactor;
public void fireEvent(String s) {
rootReactor.notify("test.topic", Event.wrap(s));
}
}
If you’re using annotated handler beans as Consumers using the @Selector annotation, your method can also serve as a request/reply handler by returning a value. To tell the BeanPostProcessor where to send the return value, use the @ReplyTo("topic") annotation on your handler method.
@Component
public class HandlerBean {
@Autowired
@Qualifier("rootReactor")
private Reactor reactor;
@Selector("test.topic")
@ReplyTo("reply.topic")
public String handleTestTopic(Event<String> evt) {
return "Hello World!";
}
}
Home | Usage Guide | Tuples | Streams | Promises | API Javadoc