spring ioc(Inversion of Control) 和 Aop 总结

什么是IOC(DI)机制?


控制反转(Inversion of Control)依赖注入(Dependecy Injection)是同一个概念,具体的讲:当某个角色 

需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中 
创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者 
因此也称为依赖注入。 
spring以动态灵活的方式来管理对象; 注入的两种方式,设置注入和构造注入。

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

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

控制反转,就是交换控制权的意思,比如我类A需要用到类B的时候,具体的实现方式是在类B的某个方法里,也就是说类B控制着这个业务的具体实现。而现在用IOC以后,类B交出控制权,类A来进行控制,类A里只需要调用一个接口的方法,不管你这个方法的具体实现是由类B的对象来实现,还是由其他类的对象来实现,反正类A调用这个接口的这个方法就可以搞定他需要实现的业务内容,这样一来,类A它看上去就得到了实现某个业务的控制权。而依赖注入这个词则体现得更加专业一点,就是讲在我的程序里,我从来不去构造(new HelloWorld()这样的方法)任何对象,只是在需要用到(也就是依赖)某个对象的时候,我就用spring给他注入这个对象。这个注入的方式也就降低了程序的耦合度

举个简单的例子
某些项目中,涉及到人的都有名字属性。那么绝大部分时候,我们会这样设计程序
class Person
{
   //一些字段或方法
}
class Ma
{
    private Person person= new Person();        //自己实例化 Person类
    public void save(Person person)
    {   
        person.execute();
   }
}
即要储存一个人的信息,要管理者实例化一个Person类。
而IOC的意思就是我们Person实例,这时候实例已经创建,我们去取就可以,不用自己实例.

class Ma
{
    private Person person = springFactory.getBean("person");
    public void svae(Person person)
    {
        name.execute();
    }
}
这些axe就是在spring的配置文件里声明的bean. 

什么是AOP? 

面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为spring支持用户自定义的切面和面向切面编程提供声明式事务管理 


和meta-program有关系,meta-program就是用代码生成代码。
当应用分层了以后,你可能发现某些功能是贯穿于每层的(比如捕获异常、日志输出等),就像一个个切片(Pointcut)一样。我们说一个方法一次只做一件事并把他做好,但是往往我们的方法中会有捕获异常、日志输出这样的逻辑与业务逻辑混杂。所以高人们就用meta-programming来将这些逻辑放在应该放的地方。
说通俗点就是将共通的部分抽象出来,单独实现,然后切入到你想执行的地方。举个例子吧!
把类当做一条直线,java开发讲究的是低耦合,低耦合到极限的时候就是线与线都是平行的,无任何交叉,交叉就代表着依赖。有一个共通的操作要在所有平行线上执行,这样就产生了交叉。AOP的功能就是将这条交叉的线独立出来,人为的放置平行,但功能还是原来的功能!
举例:
AOP是面向切面编程,简单点解释,比方说你想在你的Service层所有类中都加上一个打印‘hello world’(实际操作中可能是日志、日常等)的功能这你经可以用aop思想来做,你先写个类写个方法,方法经实现打印‘hello world’让后你Ioc这个类 ref=“Service.*”让每个类都注入。


以上为自己做的一些简单总结,有个人的理解还有一些论坛的回复,希望你帮助到你!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值