[[Class-ClassComponent]]
Class Component
~~~~~~~~~~~~~~~

*Available as of Camel 2.4*

The *class:* component binds beans to Camel message exchanges. It works
in the same way as the link:bean.html[Bean] component but instead of
looking up beans from a link:registry.html[Registry] it creates the bean
based on the class name.

[[Class-URIformat]]
URI format
^^^^^^^^^^

[source,java]
-------------------------
class:className[?options]
-------------------------

Where *className* is the fully qualified class name to create and use as
bean.

[[Class-Options]]
Options
^^^^^^^


// component options: START
The Class component has no options.
// component options: END



// endpoint options: START
The Class component supports 6 endpoint options which are listed below:

{% raw %}
[width="100%",cols="2,1,1m,1m,5",options="header"]
|=======================================================================
| Name | Group | Default | Java Type | Description
| beanName | producer |  | String | *Required* Sets the name of the bean to invoke
| method | producer |  | String | Sets the name of the method to invoke on the bean
| cache | advanced | false | boolean | If enabled Camel will cache the result of the first Registry look-up. Cache can be enabled if the bean in the Registry is defined as a singleton scope.
| multiParameterArray | advanced | false | boolean | How to treat the parameters which are passed from the message body; if it is true the message body should be an array of parameters. Note: This option is used internally by Camel and is not intended for end users to use.
| parameters | advanced |  | Map | Used for configuring additional properties on the bean
| synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
|=======================================================================
{% endraw %}
// endpoint options: END


[[Class-Using]]
Using
^^^^^

You simply use the *class* component just as the link:bean.html[Bean]
component but by specifying the fully qualified classname instead. +
 For example to use the `MyFooBean` you have to do as follows:

[source,java]
-------------------------------------------------------------------------------------------------
    from("direct:start").to("class:org.apache.camel.component.bean.MyFooBean").to("mock:result");
-------------------------------------------------------------------------------------------------

You can also specify which method to invoke on the `MyFooBean`, for
example `hello`:

[source,java]
--------------------------------------------------------------------------------------------------------------
    from("direct:start").to("class:org.apache.camel.component.bean.MyFooBean?method=hello").to("mock:result");
--------------------------------------------------------------------------------------------------------------

[[Class-Settingpropertiesonthecreatedinstance]]
Setting properties on the created instance
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In the endpoint uri you can specify properties to set on the created
instance, for example if it has a `setPrefix` method:

[source,java]
---------------------------------------------------------------------------------
   // Camel 2.17 onwards
   from("direct:start")
        .to("class:org.apache.camel.component.bean.MyPrefixBean?bean.prefix=Bye")
        .to("mock:result");
 
   // Camel 2.16 and older 
   from("direct:start")
        .to("class:org.apache.camel.component.bean.MyPrefixBean?prefix=Bye")
        .to("mock:result");
---------------------------------------------------------------------------------

And you can also use the `#` syntax to refer to properties to be looked
up in the link:registry.html[Registry].

[source,java]
--------------------------------------------------------------------------------
    // Camel 2.17 onwards
    from("direct:start")
        .to("class:org.apache.camel.component.bean.MyPrefixBean?bean.cool=#foo")
        .to("mock:result");

    // Camel 2.16 and older
    from("direct:start")
        .to("class:org.apache.camel.component.bean.MyPrefixBean?cool=#foo")
        .to("mock:result");
--------------------------------------------------------------------------------

Which will lookup a bean from the link:registry.html[Registry] with the
id `foo` and invoke the `setCool` method on the created instance of the
`MyPrefixBean` class.

TIP:See more details at the link:bean.html[Bean] component as the *class*
component works in much the same way.

[[Class-SeeAlso]]
See Also
^^^^^^^^

* link:configuring-camel.html[Configuring Camel]
* link:component.html[Component]
* link:endpoint.html[Endpoint]
* link:getting-started.html[Getting Started]

* link:bean.html[Bean]
* link:bean-binding.html[Bean Binding]
* link:bean-integration.html[Bean Integration]

