IOC理解
控制反转:谁控制了谁? 就是交换控制权。
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