Annotations and Bean Proxy Approach
This approach allows users to quickly and easily inject any component with bean proxies. Components simply have to annotate any fields they wish injected with @SpringBean annotation. Interesting classes:

Below is comparison of AnnotPage and ProxyPage. Notice how much cleaner the dependency lookup is in the AnnotPage (in fact the lookup itself is hidden, only an annotated field is present).
public class AnnotPage extends ContactsDisplayPage {

	@SpringBean private ContactDao dao;

	public AnnotPage() {

	}

	protected SortableDataProvider getDataProvider() {
		return new ProxyDataProvider(dao);
	}
}
public class ProxyPage extends ContactsDisplayPage {
	public ProxyPage() {

	}

	private ContactDao getContactDao() {
		return ((ExampleApplication) Application.get()).getContactDaoProxy();
	}

	protected SortableDataProvider getDataProvider() {
		return new ProxyDataProvider(getContactDao());
	}
}