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

[[core-api-object,Objects]]
= Objects =
There are times when Apache Polygene needs to interoperate with other systems, which
does not have interfaces as their abstraction. Polygene has a notion of
Objects, which are Polygene-managed classes and can still be injected with
the Polygene runtime model, such as @Structure and @Service.


The characteristics of an Object compared to Composite meta types are;

    * It is a Class, not an interface.
    * It can have injections applied to it after it has been created.
    * No Mixins, Concerns or SideEffects.
    * No Constraints.
    * Can not have Property instances managed by the Polygene runtime.

== Serialization ==
Objects can be serialized and deserialized using the Serialization API, if and only
if they are used as types in Properties in Values or Entities. It depends on the
Serialization implementation on how the objects are serialized, and
what the requirements are to allow for deserialization. In general, the Spring
POJO setter/getter approach will always work, a default constructor is needed, and
to be safe, make it into +java.io.Serializable+.

== Usage ==
Objects are instantiated either by calling +ObjectFactory.newObject( type, ... )+ or
instantiating it in some other fashion and then call +ObjectFactory.injectInto(...)+
to populate the fields.
