IoC容器要实现插件机制:一是手动进行字符串形式的组件注册(不能采用标准的配置文件注册),二是字符串形式的类名取得组件对象。
1. IoC
“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓“反转”,这是通常对IOC的一个解释。
IOC模式系统中,通过引入实现IOC模式的IOC容器,即可由IOC容器来管理对象的生命周期、依赖关系等,从而使得应用程序的配置和依赖性规范与实际的应用程序代码分开。其中一个特点就是通过文本的配置文件进行应用程序组件间相互关系的配置,而不用重新修改并编译具体的代码。
可以把IoC模式看做是工厂模式的升华,可以把IoC看作是一个大工厂,只不过这个大工厂里要生成的对象都是在XML文件中给出定义的。然后利用Java 的“反射”编程,根据XML中给出的类名生成相应的对象。从实现来看,IoC是把以前在工厂方法里写死的对象生成代码,改变为由XML文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。
IoC中最基本的Java技术就是“反射”编程。反射又是一个生涩的名词,通俗的说反射就是根据给出的类名(字符串)来生成对象。
2. DI
为什么我们总是把IOC和DI联系到一起呢?是因为DI的基本思想就是IOC,而体现IOC 思想的方法还有另外一个,那就是Service Locator,这个方法好像涉及到的很少。
DI,依赖注入,从字面意思就可以看出,依赖是通过外接注入的方式来实现的。这就实现了解耦,而DI的方式通常有三种:构造器注入、属性设置器注入、接口注入。
IoC的目的是控制转移,实现这个目标有两种方式:一是使用反射技术的依赖注入,二是服务定义Service Locator。
3. AOP
AOP即面向切面编程(Aspect Oriented Programming的缩写),是OOP(面向对象编程)的一种延续形式。是通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术,它从一个不同于OOP的角度来看待程序的结构:OOP将应用程序分解为一系列表现为继承关系的对象;AOP 则把程序分解为一系列方面(aspects)或者关注点(concerns)。
AOP将诸如事务管理等本来横向分布在多个对象中的关注点进行了模块化处理(这些关注点也常称为横切(crosscutting)关注点)。在Spring.NET中提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
4. 学习过程
你真的了解分层架构吗?——写给被PetShop"毒害"的朋友们
IoC容器的Demo示例:
Autofac的高级使用——Autofac.2.6.3.862
Castle.Windsor依赖注入的高级应用_Castle.Windsor.3.1.0
未学习:
OO五大原则
Castle学习:
http://terrylee.cnblogs.com/archive/2006/04/17/377018.html
http://www.cnblogs.com/deyuliu/archive/2007/05/25/759627.html
http://www.cnblogs.com/ulex/archive/2010/08/11/1797475.html
http://www.cnblogs.com/riccc/archive/2010/03/15/castle-dynamic-proxy.html
NUnit
http://www.cnblogs.com/xugang/archive/2008/02/26/1082565.html