1. Use pojo for lightweight development and minimally invasive development
2. Loose coupling through dependency injection and interface-based programming
3. Declarative programming with aop and default habits
4. Use aop and templates to reduce patterned code