سلام
سوال شما خیلی کلی است اما تلاش می کنم که جوابتون رو بدم ;)
ماژولاریتی را از دو جنبه می توان بررسی کرد :
1.مارژولاریتی در سطح کد که به نوعی کار دسته بندی و گروه بندی کلاس ها و کامپوننت های سورس کد شما می باشد.
2.مارژولاریتی در زمان اجرا که کار دشوارتری می باشد و پیچیدگی زیادی را به کدهای شما اضافه می کند، بدین معنی که شما می توانید در زمان اجرا یک ماژول به برنامه خود اضافه کنید، بدون این که اجرای برنامه را متوقف کنید. البته این کار با چالش های زیادی همراه است! و استفاده از آن در برخی موارد بسیار دشوار یا نا ممکن است.
OSGI تلاش می کند که ماژولاریتی در سطح کد و در زمان اجرا را انجام دهد.
Spring IOC اصول Inversion Of Control را پیاده سازی می کند و ارتباطی با ماژولار کردن ندارد. (شاید بتوان گفت که ماژولاریتی در سطح کد را انجام میدهد)
Spring یک کتابخانه به نام Spring Dynamic Module دارد که برروی OSGI ساخته شده است بنابراین اگر تمایل به استفاده از SOGI و Spring دارید می تونید از اون استفاده کنید.
در مورد ماژولار کردن DLL اطلاعات خاصی ندارم! اما اصولا ماژولاریتی دسته بندی کلاس ها و کامپوننت های نرم افزار می باشد به گونه ای این کامپوننت ها و کلاس ها کم ترین وابستگی به یکدیگر رو داشته باشند. این کار توسعه و نگهداری نرم افزار را بسیار ساده تر می کند.
http://docs.spring.io/spring/docs/2.0.8/reference/beans.html
http://en.wikipedia.org/wiki/Inversion_of_control