日期:2014-05-19  浏览次数:20586 次

spring的AOP和IOC
我不是很懂spring的AOP和IOC,希望哪位大侠指教。注入又是怎么回事呢?

------解决方案--------------------
楼主啊,这种问题来CSDN问,怕是效率太低了。如果不能买本书学习学习的话,至少也先Google研究下吧。


AOP 面向切面,虽然是Spring框架中的一个重要内容,但并不是Spring首创。核心能力是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。

IoC 控制反转,又称依赖倒置。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器负责将这些联系在一起。传统开发中,总是主调方在编码期间就必须主动集成好被调方,而IoC实现了一种更类似于,被调方在运行过程中再根据配置信息去配对主调方。


上述两种设计模式,在Java中都是借助 反射 来实现的。


这两种设计模式组合后,其核心好处是提供了一种灵活度非常高的组件集成方式,开发人员可以自由的在将组件进行组装,在接口之间进行切入时开发,随心所欲的增加包装或者装饰等等;从而可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。


希望你能稍微理解。。。
------解决方案--------------------
IOC:
在一个业务类中,如果要用到ClassA,是不是要new一个ClassA对象?这个就等于是业务类主动的去创建一个对象。引用spring之后,怎么处理呢?是这个业务类在需要一个ClassA对象时,由spring IOC容器去创建这个ClassA对象,然后注入到业务类需要的地方。这里就体现了控制反转的意思。也就是创建这个ClassA对象由业务类主动的去创建改为了被动的接受spring IOC容器的注入。

上面是前两天的一个帖子,摘取的部分内容,地址如下:
http://topic.csdn.net/u/20120719/17/fe449b7c-fb06-4605-954e-7ad620acb2d4.html

AOP:
面向切面,多用在日志、权限等。
某种意义上很像代理。比如希望在执行业务类的时候,同时记录日志。可以在执行业务类的代码后插入一部分记录日志的代码。但业务类有很多,如果每一个业务类都调用这段写日志的代码,就好麻烦,而且写日志的代码与业务类的代码也耦合在一起。所以这时就可以用到AOP,把这段写日志的代码抽出来,把它叫做一个切面,动态切入到指定方法的指定位置,这个位置叫做切入点。
这种思想就是面向切面的思想,它其实也是面向对象思想的一个补充。

注入:
简单地讲就是将需要的对象动态的插入的需要的位置,这一过程由spring的ioc容器来完成。理解了ioc,注入也就理解了。
------解决方案--------------------
IOC注入:
3种。
setter注入,这种方法是spring推荐的比较灵活,他是根据你配置文件来set你类中的一个接口把实现类注入进去。
构造注入,这种方法是通过你的构造器参数把接口的实现类注入。
接口注入,是通过转化为接口注入