An Example of the Benefits of a Programmatic Config File for Dependency Injection
Here is a simple programmatic config file. It is only a subset of my real config file, but basically loops through a set of business objects and creates and wires up the Controller, Service, DAO, IBO and Metadata beans for each.
<cffunction name="init" output="false" returntype="any" hint="I initialize the config bean.">
<cfscript>
var BusinessObjectList = "";
var BusinessObjectName = "";
Super.init();
setLazyLoad("false");
Project = CreateObject("component","lightbase.applications.#Application.name#.config.ApplicationConfig").init();
// BUSINESS OBJECTS // controller, service, DAO, IBO and metadata beans BusinessObjectList = Project.get("ObjectList");
// User, Category, Product, Page, Order, OrderItem, Cart, CartItem, ValueList, Notification, Article, AdminUser, Role, Permission, AuthenticationMethod, DiscountCode, ShippingMethod, ShippingRate, SalesTax, ProductAttribute, FAQ, Address, PaymentMethod
For (ConfigCount = 1; ConfigCount lte listlen(BusinessObjectList); ConfigCount = ConfigCount + 1)
{
// Get current object name BusinessObjectName = ListGetAt(BusinessObjectList, ConfigCount);
// Controller addSingleton("lightbase.applications.#Application.Name#.com.controller.object.#BusinessObjectName#Controller");
// Service addSingleton("lightbase.applications.#Application.Name#.com.model.#BusinessObjectName#.#BusinessObjectName#Service");
addConstructorDependency("#BusinessObjectName#Service","#BusinessObjectName#Metadata", "Metadata");
addMixinDependency("#BusinessObjectName#Service","#BusinessObjectName#DAO");
addMixinDependency("LightBase","#BusinessObjectName#Service");
// DAO addSingleton("lightbase.applications.#Application.Name#.com.model.#BusinessObjectName#.#BusinessObjectName#DAO");
addConstructorDependency("#BusinessObjectName#DAO","#BusinessObjectName#Metadata", "Metadata");
// Business Object (IBO) addSingleton("lightbase.applications.#Application.Name#.com.model.#BusinessObjectName#.#BusinessObjectName#");
addConstructorDependency("#BusinessObjectName#","#BusinessObjectName#Metadata", "Metadata");
addMixinDependency("#BusinessObjectName#","DataType");
addMixinDependency("#BusinessObjectName#","#BusinessObjectName#DAO");
// Metadata addSingleton("lightbase.applications.#Application.Name#.com.model.#BusinessObjectName#.#BusinessObjectName#Metadata");
addConstructorDependency("#BusinessObjectName#Metadata","ApplicationConfig");
};
</cfscript>
<cfreturn THIS>
</cffunction>
</cfcomponent>
I then took what for me would be a typical simple e-commerce project with the following business objects: User, Category, Product, Page, Order, OrderItem, Cart, CartItem, ValueList, Notification, Article, AdminUser, Role, Permission, AuthenticationMethod, DiscountCode, ShippingMethod, ShippingRate, SalesTax, ProductAttribute, FAQ, Address, PaymentMethod and wrote the XML (I cut and pasted this from someone else so apologies if the syntax isn't valid - I *believe* it is correct) and got the following.
<bean id="UserController" class="lightbase.applications.#Application.Name#.com.controller.object.UserController">
</bean>
<bean id="UserService" class="lightbase.applications.#Application.Name#.com.model.User.UserService">
<constructor-arg name="UserMetadata">
<ref bean="UserMetadata"/>
</constructor-arg>
<property name="UserDAO">
<ref bean="UserDAO" />
</property>
</bean>
<bean id="UserDAO" class="lightbase.applications.#Application.Name#.com.model.User.UserDAO">
<constructor-arg name="UserMetadata">
<ref bean="UserMetadata"/>
</constructor-arg>
</bean>
<bean id="user" class="lightbase.applications.#Application.Name#.com.model.User.User">
<constructor-arg name="UserMetadata">
<ref bean="UserMetadata"/>
</constructor-arg>
<property name="UserDAO">
<ref bean="UserDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="UserMetadata" class="lightbase.applications.#Application.Name#.config.UserMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
<bean id="ProductController" class="lightbase.applications.#Application.Name#.com.controller.object.ProductController">
</bean>
<bean id="ProductService" class="lightbase.applications.#Application.Name#.com.model.Product.ProductService">
<constructor-arg name="ProductMetadata">
<ref bean="ProductMetadata"/>
</constructor-arg>
<property name="ProductDAO">
<ref bean="ProductDAO" />
</property>
</bean>
<bean id="ProductDAO" class="lightbase.applications.#Application.Name#.com.model.Product.ProductDAO">
<constructor-arg name="ProductMetadata">
<ref bean="ProductMetadata"/>
</constructor-arg>
</bean>
<bean id="Product" class="lightbase.applications.#Application.Name#.com.model.Product.Product">
<constructor-arg name="ProductMetadata">
<ref bean="ProductMetadata"/>
</constructor-arg>
<property name="ProductDAO">
<ref bean="ProductDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="ProductMetadata" class="lightbase.applications.#Application.Name#.config.ProductMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
<bean id="CategoryController" class="lightbase.applications.#Application.Name#.com.controller.object.CategoryController">
</bean>
<bean id="CategoryService" class="lightbase.applications.#Application.Name#.com.model.Category.CategoryService">
<constructor-arg name="CategoryMetadata">
<ref bean="CategoryMetadata"/>
</constructor-arg>
<property name="CategoryDAO">
<ref bean="CategoryDAO" />
</property>
</bean>
<bean id="CategoryDAO" class="lightbase.applications.#Application.Name#.com.model.Category.CategoryDAO">
<constructor-arg name="CategoryMetadata">
<ref bean="CategoryMetadata"/>
</constructor-arg>
</bean>
<bean id="Category" class="lightbase.applications.#Application.Name#.com.model.Category.Category">
<constructor-arg name="CategoryMetadata">
<ref bean="CategoryMetadata"/>
</constructor-arg>
<property name="CategoryDAO">
<ref bean="CategoryDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="CategoryMetadata" class="lightbase.applications.#Application.Name#.config.CategoryMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
<bean id="PageController" class="lightbase.applications.#Application.Name#.com.controller.object.PageController">
</bean>
<bean id="PageService" class="lightbase.applications.#Application.Name#.com.model.Page.PageService">
<constructor-arg name="PageMetadata">
<ref bean="PageMetadata"/>
</constructor-arg>
<property name="PageDAO">
<ref bean="PageDAO" />
</property>
</bean>
<bean id="PageDAO" class="lightbase.applications.#Application.Name#.com.model.Page.PageDAO">
<constructor-arg name="PageMetadata">
<ref bean="PageMetadata"/>
</constructor-arg>
</bean>
<bean id="Page" class="lightbase.applications.#Application.Name#.com.model.Page.Page">
<constructor-arg name="PageMetadata">
<ref bean="PageMetadata"/>
</constructor-arg>
<property name="PageDAO">
<ref bean="PageDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="PageMetadata" class="lightbase.applications.#Application.Name#.config.PageMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
<bean id="OrderController" class="lightbase.applications.#Application.Name#.com.controller.object.OrderController">
</bean>
<bean id="OrderService" class="lightbase.applications.#Application.Name#.com.model.Order.OrderService">
<constructor-arg name="OrderMetadata">
<ref bean="OrderMetadata"/>
</constructor-arg>
<property name="OrderDAO">
<ref bean="OrderDAO" />
</property>
</bean>
<bean id="OrderDAO" class="lightbase.applications.#Application.Name#.com.model.Order.OrderDAO">
<constructor-arg name="OrderMetadata">
<ref bean="OrderMetadata"/>
</constructor-arg>
</bean>
<bean id="Order" class="lightbase.applications.#Application.Name#.com.model.Order.Order">
<constructor-arg name="OrderMetadata">
<ref bean="OrderMetadata"/>
</constructor-arg>
<property name="OrderDAO">
<ref bean="OrderDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="OrderMetadata" class="lightbase.applications.#Application.Name#.config.OrderMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
<bean id="OrderItemController" class="lightbase.applications.#Application.Name#.com.controller.object.OrderItemController">
</bean>
<bean id="OrderItemService" class="lightbase.applications.#Application.Name#.com.model.OrderItem.OrderItemService">
<constructor-arg name="OrderItemMetadata">
<ref bean="OrderItemMetadata"/>
</constructor-arg>
<property name="OrderItemDAO">
<ref bean="OrderItemDAO" />
</property>
</bean>
<bean id="OrderItemDAO" class="lightbase.applications.#Application.Name#.com.model.OrderItem.OrderItemDAO">
<constructor-arg name="OrderItemMetadata">
<ref bean="OrderItemMetadata"/>
</constructor-arg>
</bean>
<bean id="OrderItem" class="lightbase.applications.#Application.Name#.com.model.OrderItem.OrderItem">
<constructor-arg name="OrderItemMetadata">
<ref bean="OrderItemMetadata"/>
</constructor-arg>
<property name="OrderItemDAO">
<ref bean="OrderItemDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="OrderItemMetadata" class="lightbase.applications.#Application.Name#.config.OrderItemMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
<bean id="CartController" class="lightbase.applications.#Application.Name#.com.controller.object.CartController">
</bean>
<bean id="CartService" class="lightbase.applications.#Application.Name#.com.model.Cart.CartService">
<constructor-arg name="CartMetadata">
<ref bean="CartMetadata"/>
</constructor-arg>
<property name="CartDAO">
<ref bean="CartDAO" />
</property>
</bean>
<bean id="CartDAO" class="lightbase.applications.#Application.Name#.com.model.Cart.CartDAO">
<constructor-arg name="CartMetadata">
<ref bean="CartMetadata"/>
</constructor-arg>
</bean>
<bean id="Cart" class="lightbase.applications.#Application.Name#.com.model.Cart.Cart">
<constructor-arg name="CartMetadata">
<ref bean="CartMetadata"/>
</constructor-arg>
<property name="CartDAO">
<ref bean="CartDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="CartMetadata" class="lightbase.applications.#Application.Name#.config.CartMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
<bean id="CartItemController" class="lightbase.applications.#Application.Name#.com.controller.object.CartItemController">
</bean>
<bean id="CartItemService" class="lightbase.applications.#Application.Name#.com.model.CartItem.CartItemService">
<constructor-arg name="CartItemMetadata">
<ref bean="CartItemMetadata"/>
</constructor-arg>
<property name="CartItemDAO">
<ref bean="CartItemDAO" />
</property>
</bean>
<bean id="CartItemDAO" class="lightbase.applications.#Application.Name#.com.model.CartItem.CartItemDAO">
<constructor-arg name="CartItemMetadata">
<ref bean="CartItemMetadata"/>
</constructor-arg>
</bean>
<bean id="CartItem" class="lightbase.applications.#Application.Name#.com.model.CartItem.CartItem">
<constructor-arg name="CartItemMetadata">
<ref bean="CartItemMetadata"/>
</constructor-arg>
<property name="CartItemDAO">
<ref bean="CartItemDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="CartItemMetadata" class="lightbase.applications.#Application.Name#.config.CartItemMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
<bean id="ValueListController" class="lightbase.applications.#Application.Name#.com.controller.object.ValueListController">
</bean>
<bean id="ValueListService" class="lightbase.applications.#Application.Name#.com.model.ValueList.ValueListService">
<constructor-arg name="ValueListMetadata">
<ref bean="ValueListMetadata"/>
</constructor-arg>
<property name="ValueListDAO">
<ref bean="ValueListDAO" />
</property>
</bean>
<bean id="ValueListDAO" class="lightbase.applications.#Application.Name#.com.model.ValueList.ValueListDAO">
<constructor-arg name="ValueListMetadata">
<ref bean="ValueListMetadata"/>
</constructor-arg>
</bean>
<bean id="ValueList" class="lightbase.applications.#Application.Name#.com.model.ValueList.ValueList">
<constructor-arg name="ValueListMetadata">
<ref bean="ValueListMetadata"/>
</constructor-arg>
<property name="ValueListDAO">
<ref bean="ValueListDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="ValueListMetadata" class="lightbase.applications.#Application.Name#.config.ValueListMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
<bean id="NotificationController" class="lightbase.applications.#Application.Name#.com.controller.object.NotificationController">
</bean>
<bean id="NotificationService" class="lightbase.applications.#Application.Name#.com.model.Notification.NotificationService">
<constructor-arg name="NotificationMetadata">
<ref bean="NotificationMetadata"/>
</constructor-arg>
<property name="NotificationDAO">
<ref bean="NotificationDAO" />
</property>
</bean>
<bean id="NotificationDAO" class="lightbase.applications.#Application.Name#.com.model.Notification.NotificationDAO">
<constructor-arg name="NotificationMetadata">
<ref bean="NotificationMetadata"/>
</constructor-arg>
</bean>
<bean id="Notification" class="lightbase.applications.#Application.Name#.com.model.Notification.Notification">
<constructor-arg name="NotificationMetadata">
<ref bean="NotificationMetadata"/>
</constructor-arg>
<property name="NotificationDAO">
<ref bean="NotificationDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="NotificationMetadata" class="lightbase.applications.#Application.Name#.config.NotificationMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
<bean id="ArticleController" class="lightbase.applications.#Application.Name#.com.controller.object.ArticleController">
</bean>
<bean id="ArticleService" class="lightbase.applications.#Application.Name#.com.model.Article.ArticleService">
<constructor-arg name="ArticleMetadata">
<ref bean="ArticleMetadata"/>
</constructor-arg>
<property name="ArticleDAO">
<ref bean="ArticleDAO" />
</property>
</bean>
<bean id="ArticleDAO" class="lightbase.applications.#Application.Name#.com.model.Article.ArticleDAO">
<constructor-arg name="ArticleMetadata">
<ref bean="ArticleMetadata"/>
</constructor-arg>
</bean>
<bean id="Article" class="lightbase.applications.#Application.Name#.com.model.Article.Article">
<constructor-arg name="ArticleMetadata">
<ref bean="ArticleMetadata"/>
</constructor-arg>
<property name="ArticleDAO">
<ref bean="ArticleDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="ArticleMetadata" class="lightbase.applications.#Application.Name#.config.ArticleMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
<bean id="AdminUserController" class="lightbase.applications.#Application.Name#.com.controller.object.AdminUserController">
</bean>
<bean id="AdminUserService" class="lightbase.applications.#Application.Name#.com.model.AdminUser.AdminUserService">
<constructor-arg name="AdminUserMetadata">
<ref bean="AdminUserMetadata"/>
</constructor-arg>
<property name="AdminUserDAO">
<ref bean="AdminUserDAO" />
</property>
</bean>
<bean id="AdminUserDAO" class="lightbase.applications.#Application.Name#.com.model.AdminUser.AdminUserDAO">
<constructor-arg name="AdminUserMetadata">
<ref bean="AdminUserMetadata"/>
</constructor-arg>
</bean>
<bean id="AdminUser" class="lightbase.applications.#Application.Name#.com.model.AdminUser.AdminUser">
<constructor-arg name="AdminUserMetadata">
<ref bean="AdminUserMetadata"/>
</constructor-arg>
<property name="AdminUserDAO">
<ref bean="AdminUserDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="AdminUserMetadata" class="lightbase.applications.#Application.Name#.config.AdminUserMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
<bean id="RoleController" class="lightbase.applications.#Application.Name#.com.controller.object.RoleController">
</bean>
<bean id="RoleService" class="lightbase.applications.#Application.Name#.com.model.Role.RoleService">
<constructor-arg name="RoleMetadata">
<ref bean="RoleMetadata"/>
</constructor-arg>
<property name="RoleDAO">
<ref bean="RoleDAO" />
</property>
</bean>
<bean id="RoleDAO" class="lightbase.applications.#Application.Name#.com.model.Role.RoleDAO">
<constructor-arg name="RoleMetadata">
<ref bean="RoleMetadata"/>
</constructor-arg>
</bean>
<bean id="Role" class="lightbase.applications.#Application.Name#.com.model.Role.Role">
<constructor-arg name="RoleMetadata">
<ref bean="RoleMetadata"/>
</constructor-arg>
<property name="RoleDAO">
<ref bean="RoleDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="RoleMetadata" class="lightbase.applications.#Application.Name#.config.RoleMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
<bean id="PermissionController" class="lightbase.applications.#Application.Name#.com.controller.object.PermissionController">
</bean>
<bean id="PermissionService" class="lightbase.applications.#Application.Name#.com.model.Permission.PermissionService">
<constructor-arg name="PermissionMetadata">
<ref bean="PermissionMetadata"/>
</constructor-arg>
<property name="PermissionDAO">
<ref bean="PermissionDAO" />
</property>
</bean>
<bean id="PermissionDAO" class="lightbase.applications.#Application.Name#.com.model.Permission.PermissionDAO">
<constructor-arg name="PermissionMetadata">
<ref bean="PermissionMetadata"/>
</constructor-arg>
</bean>
<bean id="Permission" class="lightbase.applications.#Application.Name#.com.model.Permission.Permission">
<constructor-arg name="PermissionMetadata">
<ref bean="PermissionMetadata"/>
</constructor-arg>
<property name="PermissionDAO">
<ref bean="PermissionDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="PermissionMetadata" class="lightbase.applications.#Application.Name#.config.PermissionMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
<bean id="AuthenticationMethodController" class="lightbase.applications.#Application.Name#.com.controller.object.AuthenticationMethodController">
</bean>
<bean id="AuthenticationMethodService" class="lightbase.applications.#Application.Name#.com.model.AuthenticationMethod.AuthenticationMethodService">
<constructor-arg name="AuthenticationMethodMetadata">
<ref bean="AuthenticationMethodMetadata"/>
</constructor-arg>
<property name="AuthenticationMethodDAO">
<ref bean="AuthenticationMethodDAO" />
</property>
</bean>
<bean id="AuthenticationMethodDAO" class="lightbase.applications.#Application.Name#.com.model.AuthenticationMethod.AuthenticationMethodDAO">
<constructor-arg name="AuthenticationMethodMetadata">
<ref bean="AuthenticationMethodMetadata"/>
</constructor-arg>
</bean>
<bean id="AuthenticationMethod" class="lightbase.applications.#Application.Name#.com.model.AuthenticationMethod.AuthenticationMethod">
<constructor-arg name="AuthenticationMethodMetadata">
<ref bean="AuthenticationMethodMetadata"/>
</constructor-arg>
<property name="AuthenticationMethodDAO">
<ref bean="AuthenticationMethodDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="AuthenticationMethodMetadata" class="lightbase.applications.#Application.Name#.config.AuthenticationMethodMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
<bean id="DiscountCodeController" class="lightbase.applications.#Application.Name#.com.controller.object.DiscountCodeController">
</bean>
<bean id="DiscountCodeService" class="lightbase.applications.#Application.Name#.com.model.DiscountCode.DiscountCodeService">
<constructor-arg name="DiscountCodeMetadata">
<ref bean="DiscountCodeMetadata"/>
</constructor-arg>
<property name="DiscountCodeDAO">
<ref bean="DiscountCodeDAO" />
</property>
</bean>
<bean id="DiscountCodeDAO" class="lightbase.applications.#Application.Name#.com.model.DiscountCode.DiscountCodeDAO">
<constructor-arg name="DiscountCodeMetadata">
<ref bean="DiscountCodeMetadata"/>
</constructor-arg>
</bean>
<bean id="DiscountCode" class="lightbase.applications.#Application.Name#.com.model.DiscountCode.DiscountCode">
<constructor-arg name="DiscountCodeMetadata">
<ref bean="DiscountCodeMetadata"/>
</constructor-arg>
<property name="DiscountCodeDAO">
<ref bean="DiscountCodeDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="DiscountCodeMetadata" class="lightbase.applications.#Application.Name#.config.DiscountCodeMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
<bean id="ShippingMethodController" class="lightbase.applications.#Application.Name#.com.controller.object.ShippingMethodController">
</bean>
<bean id="ShippingMethodService" class="lightbase.applications.#Application.Name#.com.model.ShippingMethod.ShippingMethodService">
<constructor-arg name="ShippingMethodMetadata">
<ref bean="ShippingMethodMetadata"/>
</constructor-arg>
<property name="ShippingMethodDAO">
<ref bean="ShippingMethodDAO" />
</property>
</bean>
<bean id="ShippingMethodDAO" class="lightbase.applications.#Application.Name#.com.model.ShippingMethod.ShippingMethodDAO">
<constructor-arg name="ShippingMethodMetadata">
<ref bean="ShippingMethodMetadata"/>
</constructor-arg>
</bean>
<bean id="ShippingMethod" class="lightbase.applications.#Application.Name#.com.model.ShippingMethod.ShippingMethod">
<constructor-arg name="ShippingMethodMetadata">
<ref bean="ShippingMethodMetadata"/>
</constructor-arg>
<property name="ShippingMethodDAO">
<ref bean="ShippingMethodDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="ShippingMethodMetadata" class="lightbase.applications.#Application.Name#.config.ShippingMethodMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
<bean id="ShippingRateController" class="lightbase.applications.#Application.Name#.com.controller.object.ShippingRateController">
</bean>
<bean id="ShippingRateService" class="lightbase.applications.#Application.Name#.com.model.ShippingRate.ShippingRateService">
<constructor-arg name="ShippingRateMetadata">
<ref bean="ShippingRateMetadata"/>
</constructor-arg>
<property name="ShippingRateDAO">
<ref bean="ShippingRateDAO" />
</property>
</bean>
<bean id="ShippingRateDAO" class="lightbase.applications.#Application.Name#.com.model.ShippingRate.ShippingRateDAO">
<constructor-arg name="ShippingRateMetadata">
<ref bean="ShippingRateMetadata"/>
</constructor-arg>
</bean>
<bean id="ShippingRate" class="lightbase.applications.#Application.Name#.com.model.ShippingRate.ShippingRate">
<constructor-arg name="ShippingRateMetadata">
<ref bean="ShippingRateMetadata"/>
</constructor-arg>
<property name="ShippingRateDAO">
<ref bean="ShippingRateDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="ShippingRateMetadata" class="lightbase.applications.#Application.Name#.config.ShippingRateMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
<bean id="SalesTaxController" class="lightbase.applications.#Application.Name#.com.controller.object.SalesTaxController">
</bean>
<bean id="SalesTaxService" class="lightbase.applications.#Application.Name#.com.model.SalesTax.SalesTaxService">
<constructor-arg name="SalesTaxMetadata">
<ref bean="SalesTaxMetadata"/>
</constructor-arg>
<property name="SalesTaxDAO">
<ref bean="SalesTaxDAO" />
</property>
</bean>
<bean id="SalesTaxDAO" class="lightbase.applications.#Application.Name#.com.model.SalesTax.SalesTaxDAO">
<constructor-arg name="SalesTaxMetadata">
<ref bean="SalesTaxMetadata"/>
</constructor-arg>
</bean>
<bean id="SalesTax" class="lightbase.applications.#Application.Name#.com.model.SalesTax.SalesTax">
<constructor-arg name="SalesTaxMetadata">
<ref bean="SalesTaxMetadata"/>
</constructor-arg>
<property name="SalesTaxDAO">
<ref bean="SalesTaxDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="SalesTaxMetadata" class="lightbase.applications.#Application.Name#.config.SalesTaxMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
<bean id="ProductAttributeController" class="lightbase.applications.#Application.Name#.com.controller.object.ProductAttributeController">
</bean>
<bean id="ProductAttributeService" class="lightbase.applications.#Application.Name#.com.model.ProductAttribute.ProductAttributeService">
<constructor-arg name="ProductAttributeMetadata">
<ref bean="ProductAttributeMetadata"/>
</constructor-arg>
<property name="ProductAttributeDAO">
<ref bean="ProductAttributeDAO" />
</property>
</bean>
<bean id="ProductAttributeDAO" class="lightbase.applications.#Application.Name#.com.model.ProductAttribute.ProductAttributeDAO">
<constructor-arg name="ProductAttributeMetadata">
<ref bean="ProductAttributeMetadata"/>
</constructor-arg>
</bean>
<bean id="ProductAttribute" class="lightbase.applications.#Application.Name#.com.model.ProductAttribute.ProductAttribute">
<constructor-arg name="ProductAttributeMetadata">
<ref bean="ProductAttributeMetadata"/>
</constructor-arg>
<property name="ProductAttributeDAO">
<ref bean="ProductAttributeDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="ProductAttributeMetadata" class="lightbase.applications.#Application.Name#.config.ProductAttributeMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
<bean id="FAQController" class="lightbase.applications.#Application.Name#.com.controller.object.FAQController">
</bean>
<bean id="FAQService" class="lightbase.applications.#Application.Name#.com.model.FAQ.FAQService">
<constructor-arg name="FAQMetadata">
<ref bean="FAQMetadata"/>
</constructor-arg>
<property name="FAQDAO">
<ref bean="FAQDAO" />
</property>
</bean>
<bean id="FAQDAO" class="lightbase.applications.#Application.Name#.com.model.FAQ.FAQDAO">
<constructor-arg name="FAQMetadata">
<ref bean="FAQMetadata"/>
</constructor-arg>
</bean>
<bean id="FAQ" class="lightbase.applications.#Application.Name#.com.model.FAQ.FAQ">
<constructor-arg name="FAQMetadata">
<ref bean="FAQMetadata"/>
</constructor-arg>
<property name="FAQDAO">
<ref bean="FAQDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="FAQMetadata" class="lightbase.applications.#Application.Name#.config.FAQMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
<bean id="AddressController" class="lightbase.applications.#Application.Name#.com.controller.object.AddressController">
</bean>
<bean id="AddressService" class="lightbase.applications.#Application.Name#.com.model.Address.AddressService">
<constructor-arg name="AddressMetadata">
<ref bean="AddressMetadata"/>
</constructor-arg>
<property name="AddressDAO">
<ref bean="AddressDAO" />
</property>
</bean>
<bean id="AddressDAO" class="lightbase.applications.#Application.Name#.com.model.Address.AddressDAO">
<constructor-arg name="AddressMetadata">
<ref bean="AddressMetadata"/>
</constructor-arg>
</bean>
<bean id="Address" class="lightbase.applications.#Application.Name#.com.model.Address.Address">
<constructor-arg name="AddressMetadata">
<ref bean="AddressMetadata"/>
</constructor-arg>
<property name="AddressDAO">
<ref bean="AddressDAO" />
</property>
<property name="DataType">
<ref bean="DataType" />
</property>
</bean>
<bean id="AddressMetadata" class="lightbase.applications.#Application.Name#.config.AddressMetadata">
<constructor-arg name="ApplicationConfig">
<ref bean="ApplicationConfig"/>
</constructor-arg>
</bean>
</beans>


(PS: I didn't bother reading the XML version. I'll just have to trust you on that one)
http://www.pbell.com/index.cfm/2007/5/16/LightWire...