One of my favorite features in Model-Glue, suggested and originally implemented by <a href="http://www.corfield.org">Sean Corfield</a>, is autowiring.  With autowiring, if you create a method named setSomeService() on a Controller, the framework will automatically search a ColdSpring bean factory for a bean named "someService" and set it into the controller.

It's super-cool, but it requires some explicit, repetitive code:  writing nearly identical setters on your controller for the services it needs.

Model-Glue 3's code name is "Gesture," and it stands for declarative workflows and elimination of boilerplate.  Clearly, something had to be done about all these setters that just serve as a marker for autowiring.

In Model-Glue 3, this "something" is a new attribute on the &lt;controller /&gt; tag called "beans":

<code>
<controller
	id="contactController" 
	type="com.myapp.controller.ContactController"
	beans="contactService,authenticationService"
/>
</code>

Inside of each Model-Glue controller is a new scope called "beans" (really, it's just a struct in variables....).  When the framework loads, it automagically sets any beans listed in the "beans" attribute of &lt;controller /&gt; into the "beans" scope, keyed by beanId, <strong>no setter required</strong>.

In other words, as soon as I reload the framework with the above &lt;controller /&gt; tag, I can do this in any listener function:

<code>
<cfset var contacts = beans.contactService.list() />
</code>

Fun stuff!