| [[BeanIntegration-BeanIntegration]] |
| = Bean Integration |
| |
| Camel supports the integration of beans and POJOs in a number of ways |
| |
| [[BeanIntegration-Annotations]] |
| == Annotations |
| |
| If a bean is defined in Spring XML or scanned using |
| the Spring component scanning mechanism and a *<camelContext>* is used |
| or a `CamelBeanPostProcessor` then we process a number of Camel |
| annotations to do various things such as injecting resources or |
| producing, consuming or routing messages. |
| |
| The following annotations is supported and inject by Camel's |
| `CamelBeanPostProcessor` |
| |
| [width="100%",cols="10%,90%",options="header",] |
| |======================================================================= |
| |Annotation |Description |
| |`@EndpointInject` |To inject an endpoint, see more details at xref:pojo-producing.adoc[POJO Producing]. |
| |`@BeanInject` |To inject a bean obtained from the Registry. See xref:bean-injection.adoc[Bean Injection]. |
| |`@PropertyInject` |To inject a value using property placeholder. |
| |`@Produce` |To inject a producer to send message to an endpoint. See xref:pojo-producing.adoc[POJO Producing]. |
| |`@Consume` |To inject a consumer on a method. See xref:pojo-consuming.adoc[POJO Consuming]. |
| |`@BindToRegistry` |Used for binding a bean to the registry. |
| If no name is specified then the bean will have its name auto computed based on the class name, |
| field name, or method name where the annotation is configured. |
| |======================================================================= |
| |
| See more details at: |
| |
| * xref:pojo-consuming.adoc[POJO Consuming] to consume and possibly route messages from Camel |
| * xref:pojo-producing.adoc[POJO Producing] to make it easy to produce camel messages from your POJOs |
| * `@DynamicRouter` Annotation for creating a xref:dynamic-router.adoc[Dynamic Router] from a POJO method |
| * `@RecipientList` Annotation for creating a xref:recipientList-eip.adoc[Recipient List] from a POJO method |
| * `@RoutingSlip` Annotation for creating a xref:routingSlip-eip.adoc[Routing Slip] for a POJO method |
| * xref:bean-injection.adoc[Bean Injection] to inject Camel related resources into your POJOs |
| * xref:using-exchange-pattern-annotations.adoc[Using Exchange Pattern Annotations] |
| describes how the pattern annotations can be used to change |
| the behaviour of method invocations with Spring Remoting or POJO Producing |
| |
| *Example* |
| |
| See the https://github.com/apache/camel/tree/master/examples/camel-example-pojo-messaging[POJO Messaging Example] |
| for how to use the annotations for routing and messaging. |
| |
| [[BeanIntegration-BeanComponent]] |
| == Bean Component |
| |
| The xref:components::bean-component.adoc[Bean] component allows one to invoke a particular |
| method. Alternately the xref:components::bean-component.adoc[Bean] component supports the |
| creation of a proxy via `ProxyHelper` to a Java interface; which allows to hide sending data |
| to the endpoint via an interface. See more at xref:hiding-middleware.adoc[Hiding Middleware]. |
| |
| [[BeanIntegration-SpringRemoting]] |
| == Spring Remoting |
| |
| We support a Spring Remoting provider which |
| uses Camel as the underlying transport mechanism. The nice thing about |
| this approach is we can use any of the Camel transport |
| Components to communicate between beans. It also |
| means we can use Content Based Router |
| and the other xref:enterprise-integration-patterns.adoc[Enterprise |
| Integration Patterns] in between the beans; in particular we can use |
| Message Translator to be able to convert |
| what the on-the-wire messages look like in addition to adding various |
| headers and so forth. |
| |
| *Bean binding* |
| |
| Whenever Camel invokes a bean method via one of the above methods |
| (xref:components::bean-component.adoc[Bean] component, xref:spring-remoting.adoc[Spring |
| Remoting] or POJO Consuming) then the |
| *Bean Binding* mechanism is used to figure out |
| what method to use (if it is not explicit) and how to bind the |
| Message to the parameters possibly using the |
| Parameter Binding Annotations |
| or using a method name option. |