///////////////////////////////////////////////////////////////
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
///////////////////////////////////////////////////////////////

[[library-spring, Spring Integration Library]]
= Spring Integration =

[devstatus]
--------------
source=libraries/spring/dev-status.xml
--------------

include::../../build/docs/buildinfo/artifact.txt[]

== Using Spring Framework in Apache Zest™ ==
Zest™ supports that Spring Application Context is imported into the Zest™ runtime, and the declared Spring
beans will be available as Zest™ services. The most important things to remember are;

    1. Only Spring Singletons are currently supported.
    2. One ApplicationContext per Zest™ Module.
    3. The Zest™ service will be given the same name as the Spring Bean name.
    4. Zest™ Configuration is not reacbable from the Spring bean (kind of obvious).

[snippet,java]
----
source=libraries/spring/src/test/java/org/apache/zest/library/spring/importer/ZestImportServiceTest.java
tag=import
----

== Using Apache Zest™ in Spring Framework ==
It is also possible to run a Zest™ Application as a Spring Bean and export its Services to Spring.

Steps to export Zest™ service:

    1. Create spring BeanFactory service of Zest services to export.
    2. Create a class that extends ZestApplicationBootstrap.
    3. Sets the layer and module that register BeanFactory service.
    4. Assemble Zest application by implementing #assemble method.
    5. Sets the identity of bean factory service. This identity is the spring bean name.
    6. Declare Zest bootstrap in spring xml application context.

To bootstrap the Zest™ runtime in Spring, you should have a bootstrap bean that extends the
+org.apache.zest.library.spring.bootstrap.ZestApplicationBootstrap+ and implement the
+org.springframework.context.ApplicationContextAware+.

A new bean will appear in the application context, called +"zestApplication"+ which is only
intended for internal use of this library.

Example application context;
[source,xml]
----
 <?xml version="1.0" encoding="UTF-8"?>

 <beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:zest="http://zest.apache.org/schema/zest/spring"
  xsi:schemaLocation="
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  http://zest.apache.org/schema/zest/spring http://zest.apache.org/schema/zest/spring/spring-0.5.xsd">

  <!-- class that implements ZestApplicationBootstrap -->

  <zest:bootstrap class="org.hedhman.niclas.MyZestBootstrapper"/>

  <bean id="someService" class="org.hedhman.niclas.SomeService">

  <constructor-arg ref="someService"/> <!-- Reference zest comment service -->

 </bean>
----

[snippet,java]
----
source=libraries/spring/src/test/java/org/apache/zest/library/spring/MyZestBootstrapper.java
tag=code
----
