blob: d698e916db2385e05cb54eb1fea0bcdaa065be5a [file] [log] [blame]
[[BeanInjection-BeanInjection]]
= Bean Injection
We support the injection of various resources using @EndpointInject or
@BeanInject. This can be used to inject
* xref:endpoint.adoc[Endpoint] instances which can be used for testing
when used with xref:components::mock-component.adoc[Mock] endpoints; see the
xref:spring-testing.adoc[Spring Testing] for an example.
* xref:producertemplate.adoc[ProducerTemplate] instances for
xref:pojo-producing.adoc[POJO Producing]
* client side proxies for xref:pojo-producing.adoc[POJO Producing] which
is a simple approach to xref:spring-remoting.adoc[Spring Remoting]
[[BeanInjection-Using-BeanInject]]
== Using @BeanInject
From *Camel 2.13* onwards you can inject beans (obtained from the
xref:registry.adoc[Registry]) into your beans such as `RouteBuilder`
classes.
For example to inject a bean named foo, you can enlist the bean in the
xref:registry.adoc[Registry] such as in a Spring XML file:
[source,xml]
----
<bean id="foo" class="com.foo.MyFooBean"/>
----
And then in a Java `RouteBuilder` class, you can inject the bean using
`@BeanInject` as shown below:
[source,java]
----
public class MyRouteBuilder extends RouteBuilder {
@BeanInject("foo")
MyFooBean foo;
public void configure() throws Exception {
..
}
}
----
If you omit the name, then Camel does a lookup by type, and injects the
bean if there is exactly only one bean of that type enlisted in the
xref:registry.adoc[Registry].
[source,java]
----
@BeanInject
MyFooBean foo;
----