×

ioc aop

IOC、AOP的理解

我的笔记 我的笔记 发表于2018-04-17 15:01:17 浏览3171 评论0

抢沙发发表评论

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

     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生成对象。

//一般我们需要斧头去砍树就要自己去制造斧头:
 private Axe axe = new Axe();        //自己制造斧头
    public void cut(Axe axe)
    {
        axe.cut();//进行砍树
    }

//而IOC我们需要斧头,这个斧头已经制造好了,我们去取就OK:
private Axe axe = springFactory.getBean("axe");
    public void cut(Axe axe)
    {
        axe.cut();
    }
//这些axe就是在spring的配置文件里声明的bean:
<bean id="ss" class="A">
    <property name="dao">
        <ref bean="dbdao" />
    </property
</bean>


     AOP面向切面

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

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

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


我的笔记博客版权我的笔记博客版权