Yan Container is a fast and extensible ioc container.

As an embeddable container with compact core, it optionally provides an xml support with syntax as sleek as straight Java code.


Feature highlights:


1. sleek xml syntax.

Instead of:
  <bean id="account" class="BankAccount">
    <properties>
      <property name="name"><value>Tom</value></property>
      <property name="age"><value>10</value></property>
      <property name="sessionFactory"><ref local="factory1"/></property>
    </properties>
  </bean>

One can write:
  <bean id="account" class="BankAccount" props="{name=Tom,age=10,sessionFactory=$factory1}"/>

Instead of:
  <bean id="exampleBean" class="examples.ExampleBean">
    <constructor-arg><ref bean="anotherExampleBean"/></constructor-arg>
    <constructor-arg><ref bean="yetAnotherBean"/></constructor-arg>
    <constructor-arg type="int"><value>1</value></constructor-arg>
  </bean>

One can write:
  <ctor id="exampleBean" class="examples.ExampleBean" args="$anotherExampleBean, $yetAnotherBean, 1"/>


2. Fast. Bean construction runs 10 times faster than Spring IoC container for the same pojo classes.
Please refer to benchmark.


3. Auto registration makes configuration a breeze.

Instead of writing a hundred and thirty three <bean> tags to register all domain objects, one can write:
  <foreach names="Customer,Account,Bank,Person,Job,Schedule">
    <function params="name">
      <bean class="com.mycompany.${name}" property-names="*" autowire="bytype"/>
    </function>
  </foreach>



4. Integration with AspectJ, servlet and Spring. (We are working on more.)

All Spring beans and factory beans can be re-used in Yan with similar syntax.

Aspectj is integrated in a simpler syntax so that you can write:
  <aspectj class="com.mycompany.SomeAspect" props="{datasource=$datasource}"/>



5. Extensible tag system makes it easy to reuse code and to integrate any third party.

6. Extensible auto-wiring mode. EJB3 annotation style, for example.

7. Complete solution for fighting anemic domain model.

8. Advanced moduling. Auxiliary beans can be nested or hidden as module private so as not to be visible from the outside.

Say goodbye to "I should have used the transaction proxied bean, not this stupid raw instance!" type of error.

9. Constructor Injection, Setter Injection, Factory Injection and many others and their combinations are supported.

10. Rich life cycle support.

Both simple lifecycle such as spring style "init-method", "destroy-method" and more advanced lifecycle such as lifecycle with parameters are supported.

11. life cycle management for prototype beans. Domain objects can be managed by container now.

12. No funny marker interfaces.



The latest can be downloaded here:
http://docs.codehaus.org/display/YAN/Downloads