Spring 依赖注入怎么回事,还有面向方面编程是怎么回事

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring 依赖注入怎么回事,还有面向方面编程是怎么回事相关的知识,希望对你有一定的参考价值。

依赖注入,也称反转控制,IoC, DI,这些都是一回事,简单说起来就是Spring提供了一个Java Bean的处理器,通过读取xml配置文件或注解(Annotation)来自动为你需要的的接口类型,实例化(也就是新建)对象,这样你的代码就不需要针对具体对象编程,而是抽象成接口来编写,实现部分可以与抽象部分分开,便于分层,并随时替换实现方式,这也叫做注入。

面向方面编程,实际应该叫AOP,面向切面编程,这是Spring容器的另一大功能,它可以通过反射技术为你已经写好的代码自动加上一些通用功能,也是通过通过读取xml配置文件或注解(Annotation)为依据来进行反射实现的,用到了JDK的反射或CGLib的反射,能够对方法的不同部分(如前置,后置,抛出异常,环绕等)加入代码,一般用于数据库的事务处理(数据库更新类事务前后一般要加beginTransaction, endTransaction之类的代码)或日志处理等等。
参考技术A 先说IoC(控制反转),DI(依赖注入):我说的通俗一点,具体含义楼下已经给出。这两个其实是同一个概念,DI举个例子有个User类,还有个teacher类,在teacher类中要引用user对象,你要用new User出一个user对象吧,而DI就不需要new一个对象,在sring中就可初始化这user类,在注入teacher类中。IoC就是说原本有程序控制在teacher类中new 一个user对象,而现在由spring注入进去,控制权交给了spring容器来管理,就是IoC.
你说的面向方面编程:就是AOP面向切面编程。打个比方。你现在有一个dao类,要向数据库中插入数据,然后我要在插入之前记入一下时间。这个原理就是JDK中动态代理。处理器类就相当于要加进去的切面类的逻辑。就是说在你执行原本dao时这切面不会影响到原本的程序逻辑,这样业务逻辑就和事物分离开了。我说的也不清楚,了解动态代理你就明白了,AOP的原理就是动态代理。查文档proxy和invokeationHandle。打了我累死了,看看吧。别浪费别人时间。
参考技术B 楼上的说明都有了。只要spring还是用来解耦合。用

Spring:面向切片编程

  在之前我们记录Spring的随笔当中,都是记录的Spring如何对对象进行注入,如何对对象的属性值进行注入,即我们讲解的很大部分都是Spring的其中一个核心概念——依赖注入(或者说是控制翻转,IOC)的方面,那么通过前几天所学的《常用设计模式:代理模式》的学习之后,我们今天来学习一下与代理模式密切相关,或者说是代理模式的一个强大应用的Spring的另一个核心概念——面向切片编程,即AOP(Aspect OrientedProgramming)

  首先我们都知道java是一门经典的面向对象的编程语言(OOP,Object OrientedProgramming)面向对象的编程语言有三大特性,封装,继承,和多态,其中的继承允许我们定义从上到下的关系,即子类可以继承父类的一些功能函数,也可以改写父类的一些功能函数,但是要为分散的对象(即不是同一父类的对象,这里的父类不包括Object)引入一个公共的行为的时候,OOP就显得很乏力,它需要在每一个对象里头都添加这个公用的行为,这样代码的就显得很重复,很冗余,最典型的就是添加日志功能,这个日志功能和对象的核心功能毫无关系,但是要为分散的对象添加日志功能,就必须向打开每一个分散的封装好的对象,然后添加日志功能代码,我们将这种散步在各处与对象核心功能无关的代码,称之为横切代码。为了解决这个问题,AOP就应运而生。

  AOP是将多个类的公共行为封装到一个可重用的模块(如我们上一段所说的日志功能)并将其命名为“Aspect”,即是说将那些和类的核心业务无关的,却为业务模块所公共调用的逻辑处理封装起来,便可以减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。AOP弥补了OOP在横向关系上操作的不足。而实现AOP的技术的主要两种方式,其中一种就是我们《常用设计模式:代理模式》所提到的动态代理技术;还有一种方式就是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。

  而Spring当中的AOP的实现原理就是我们之前所提到的动态代理技术(如有对原理不是很理解的,可以翻看《常用设计模式:代理模式》)。那么接下来我们要看看如何去使用Spring当中的面向切片编程去实现一些功能,首先我们先来看看在Spring的面向切片编程当中的一些常设计的概念:

 

以上是关于Spring 依赖注入怎么回事,还有面向方面编程是怎么回事的主要内容,如果未能解决你的问题,请参考以下文章

Spring:面向切片编程

依赖注入究竟有啥好处?

初步认识Spring

Spring里面的切面(aop)重要吗?还有Spring里面主要用到了哪几种注入方式

Spring核心思想:IOC(控制反转)DI(依赖注入)和AOP(面向切面编程)

Spring的几道选择题