///////////////////////////////////////////////////////////////
 * 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.
///////////////////////////////////////////////////////////////

[[tut-composites-step3,Step 3 - Mixins]]
= Step 3 - Mixins =

Previous step was <<tut-composites-step2>>.

In this step we refactor the Mixin from the previous steps into two, one which serves the behaviour interface and 
one which serves the state interface. This makes it possible to reuse the interfaces independently and also makes it 
easier to exchange one interface implementation with another. This also allows us to specify the new Mixins as default 
implementations of the interfaces by adding @Mixins annotations on them.

Steps for this tutorial:

- Refactor the Mixin into one which implement the behaviour interface and one which implements the state interface. Use the @This injection annotation to allow the behaviour to access the state.
- Add a @Mixins annotations on the behaviour and state interfaces which declare the Mixins as default implementations.
- Remove the @Mixins annotation from the TransientComposite interface.

== Solution ==

Only *HelloWorld.java* remains unchanged.

*HelloWorldComposite.java*
[snippet,java]
----
source=tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldComposite.java
tag=solution
----

*HelloWorldBehaviour.java*
[snippet,java]
----
source=tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldBehaviour.java
tag=solution
----

*HelloWorldBehaviourMixin.java*
[snippet,java]
----
source=tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldBehaviourMixin.java
tag=solution
----

*HelloWorldState.java*
[snippet,java]
----
source=tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldState.java
tag=solution
----

*HelloWorldStateMixin.java*
[snippet,java]
----
source=tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial4/HelloWorldStateMixin.java
tag=solution
----

Next step is <<tut-composites-step4>>
