注:本文中部分描述都是操作我的书《JavaScript高级应用与实践》而言,还请朋友们多多支持我的书,详情请见:
博主网站地址:
http://m9m.3322.org/doc/js/md00.jsp
“北京电子工业出版社”地址
http://www.phei.com.cn/bookshop/bookinfo.asp?bookcode=TP061230%20&booktype=main
这里讲的IOC模式是指,一种很容易切入已有对象或类的模式,使得你的设计能很好的监视、改变现有设计的运行过程、结果。
注意:再次重申一下,JS中的对象和类的概念非常模糊,类也是一种对象,不过它区别于对象的特征是,可以直接使用new运算符号来
产生多个不同的、互不干扰的对象实例,而对象要产生多个互不干扰的对象实例,只能通过深度克隆。
// 有的人说JAVA的IOC是通过工厂类来实现,也就是同样的方法传入不同的类名获取到不同的对象实例,其实不然。
低侵入性似乎也成了判定一个框架的实现技术好坏的标准之一,而IOC则是通过依赖注入来实现其"好莱坞原则"
【不要给我们打电话,我们会给你打电话(don't call us, we'll call you)。可以理解为:被动调用原则】。
AOP【Aspect Oriented Programming】模式
面向方法编程,可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。
是OOP模式的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。AOP实际也是GoF设计模式的延续,
设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。
Java的AOP的实现方式之一是实现接口IntroductionInterceptor、MethodInterceptor来实现动态代理的。
// o 是需要IOC控制的对象,或类【类的时候只能对原型进行IOC】
// func 你编写的Filter方法,也叫IOC控制函数
// arD 一般调用的时候用null,函数内部使用
// bPrototype为真表示只对其原型进行处理
var IOCReflect = function(o, func, bFlg, arD, bPrototype)
{
// 防止递归循环引用
arD || (arD = {"self": o});
if(bPrototype)
{
if(!!o["prototype"])
return;
o = o["prototype"];
}
for(var k in o)
{
if("function" === typeof o[k])
{
// 利用匿名函数保护_fnc的有效性直到o[k] = function()的无效为止。
// 不能在o[k] = function()里面直接用o[k]的原因是因为k接着下轮循环就变化了
(function()
{
var p = k, _fnc = o[p];
o[k] = function()
{
var a = [];
a = Array.apply(a, arguments);
// 对过滤函传入的参数是:函数名、被过滤的函数对象、被过滤的函数对象执行的参数
if(func.apply(o, [p, _fnc, a]))
_fnc.apply(o, a);
a = null;
};
})();
}
else if(bFlg && null !== o[k] && "object" === typeof o[k])
{
if(arD["self"] !== o[k] && !arD[k])
arD[k] = o[k], IOCReflect(o[k], func, !!bFlg, arD);
}
}
};
var myClass = {
name: "xiatian",
dsp: function()
{
var a = [];
a = Array.apply(a, arguments);
a.push(this.name);
alert(a.join("\n"))
},
other: {
name: "summer",
display: function()
{
var a = [];
a = Array.apply(a, arguments);
a.push(this.name);
alert(a.join("\n"))
}
}
};
IOCReflect(myClass, function()
{
// 参数获取
var a = [];
a = Array.apply(a, arguments);
alert(["监控中的方法名:" + a[0], "\n监控中的参数(这里还可以改变参数的内容):\n" + a[2].join("\n")].join("\n"));
a[2][1] = "夏天";
return true;
}, true);
// 测试一下递归引用
myClass["myobj"] = myClass;
// 执行看看
myClass.dsp("你的名字:", "顶级配置系统!?");
myClass.other.display("我的名字:", "你猜猜看,谁说了算?");
分享到:
相关推荐
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找...
NULL 博文链接:https://moshalanye.iteye.com/blog/840421
人们用一个大而化之的名字来称呼这个模式:“控制反转”( Inversion of Control,IoC)。在本文中,我将深入探索这个模式的工作原理,给它一个更能描述其特点的名 字——“依赖注入”(Dependency Injection),并...
Spring中IOC(反转控 制) 和 AOP(面向方面编程)
介绍下spring的ioc和aop的定义
spring ioc容器初始化流程图 spring ioc容器依赖注入流程图 spring aop实现原理流程图
Spring中IOC/AOP的说明和例子
首先想说说IoC(Inversion of Control,控制倒转)。这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。这是什么意思呢,举个简单的例子,我们是如何...
IOC(DI)与AOP概念的理解
spring基础Spring IOC和Spring AOP的原理及使用
Martin Fowler的Inversion of Control Containers and the Dependency Injection pattern。中文版。 本文中,作者深入探索IOC模式的工作原理,给它一个更能描述其特点的名字——“依赖注入”(Dependency Injection...
以注解方式模拟Spring IoC AOP,了解Spring是如何实现的.
unity ioc 和 aop 简单示例,适合初学者,包括XML的配置!
依赖注入:获得依赖对象的过程由自身管理变为了由IOC容器主动注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。 AOP最多听到的就是面向切面编程,那对于这个名词,我第一次听到的时候也是不能...
控制反轉(Inversion of Control),是近來較為新興的系統開發模式,它的特性可使架構顯得更為鬆散,更驅進OO的核心思維。
C#实现的IOC和AOP框架,供学习
近日, 学习.NET平台下的依赖注入(IOC)和 面向切面(AOP)。 力求获得一种简洁实用的方法实现IOC和AOP相结合的使用方式。 查阅了多个技术资料。经过多次测试,基本达到目的。 IOC使用微软的 Microsoft.Practices....
Spring的Aop和Ioc示例代码,代码通过了调试的,没得问题.对于初学者理解和使用Spring的Aop和Ioc是够了.
包括spring的ioc和aop,ioc是用比较流行的set注入方式,aop是用比较流行的xml配置方式。由于是maven项目,所以用普通java项目的话,需要把配置文件放到和程序一个目录下(src下),还要自己导入spring依赖的包。
ioc 及aop 使用基础 与spring结合