nterprise software products always require custom integration work at the customer site, and upgrades are nearly impossible when customers have to modify the core product's configuration to introduce their customizations. By allowing for highly modular software that is easy to extend and upgrade, plug-ins offer a perfect solution for this all-too-common scenario (see "Sidebar 1. What Is a Plug-In?
With a plug-in environment that possesses cleanly defined extension points, the core product is free to undergo upgrades and the plug-ins themselves can be released and upgraded on an independent schedule. With my open source Classpath Helper project (based on Eclipse's plug-in framework), I routinely upgrade Eclipse while also releasing newer versions of my own plug-ins.
For Java developers in particular, plug-ins provide a much better upgrade story than existing J2EE components (see "Sidebar 2. Aren't J2EE Components Plug-Ins?"). Imagine having your EJBs built by different teams and then just dropping them into an application, knowing they will work. A plug-in architecture allows this level of componentization.
The popular Spring framework's
BeanFactoryPostProcessor interface enables developers to easily create a lightweight plug-in framework. . This article discusses how to do this, and it includes a working code sample that shows lightweight plug-ins in action.