欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

IOC理解

程序员文章站 2022-06-27 19:39:48
控制反转:谁控制了谁? 就是交换控制权。 1.A a =new A(); 要使用这个A 必须你去new他。控制权在a; 2.由第三方来进行创造这个A,你用的时候直接用就是。控制权在第三方。 3.其实IOC(invert of control) 就等于一个工厂模式。把我们需要的放到第三方进行操作生产, ......

     控制反转:谁控制了谁? 就是交换控制权。

     1.A a =new A();   要使用这个A 必须你去new他。控制权在a;

     2.由第三方来进行创造这个A,你用的时候直接用就是。控制权在第三方。

     3.其实IOC(invert of control) 就等于一个工厂模式。把我们需要的放到第三方进行操作生产,而工厂模式一般都是利用反射来new具体的对象,然后返回实例进行使用。

     依赖注入就是把依赖注入进去,你现在想组装一台电脑,那么你就需要显示器、主板、键鼠光驱等对象,这些对象通常是new出来的,new出来的对象和当前(this)对象就有了依赖关系。

     控制反转又称为依赖注入,主要为了降低类之间的耦合度,类A依赖类B的时候我们按传统写法就需要在类A里面调用类B对象的方法,而用spring的话,就相当于提供了一个接口,在类A里面调用这个接口就可以得到类B对象,不用new出类B的对象来。利用接口的原理来降低了耦合度,从而实现接口具体实现类的松耦合。

     而为了实现上述原理,我们把他写成配置文件,然后在程序运行时用反射的方式来加载这个配置文件(用spring时就是用的反射机制运行时调用),找到要使用的类,并由spring生成对象。

 1 //一般我们需要斧头去砍树就要自己去制造斧头:
 2  private Axe axe = new Axe();        //自己制造斧头
 3     public void cut(Axe axe)
 4     {
 5         axe.cut();//进行砍树
 6     }
 7 
 8 //而IOC我们需要斧头,这个斧头已经制造好了,我们去取就OK:
 9 private Axe axe = springFactory.getBean("axe");
10     public void cut(Axe axe)
11     {
12         axe.cut();
13     }
14 //这些axe就是在spring的配置文件里声明的bean:
15 <bean id="ss" class="A">
16     <property name="dao">
17         <ref bean="dbdao" />
18     </property
19 </bean>

     AOP面向切面

     AOP:(aspect oriented program)面向切面编程,将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象(具体业务逻辑)中去。

     比如:很多方法可能会抛异常,你要记录这个异常到日志中去,可以写个拦截器类,在这个类中记录日志,在spring.xml中配置一个对这些要记录日志的方法的aop拦截器,在这个方法执行后调用这个拦截器,记录日志。这样就不用每次抛异常都要手动记录日志。

     spring的事务管理用到的就是aop 这样也可以提高程序的内聚性。比如登陆时候在进入登录页面前写入日志,登录以后查看cookie等类似的操作,很常用的,尤其是跟数据库有关的,或者跟支付有关的程序肯定会在每一步前面插入日志,还有某些国际化项目会在每次跳转时候都转换字符集之类。

转载链接:http://www.cnblogs.com/ingstyle/p/6256502.html