`
chyx72
  • 浏览: 35290 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

[转]Spring IoC与AOP的核心思想

    博客分类:
  • JAVA
阅读更多
转:http://blog.sina.com.cn/s/blog_40e28e4b0100avrc.html
IoC和AOP都是Spring的核心思想,这两天利用休息的时间,补了补之前没看明白的Spring。现在我更关心这种技术的实现方式和核心思想,用框架,我想本身不会太复杂。

    当然,最为一个框架级的轻量组件,大量的配置文件是不可缺少的,但是核心是要把这些配置文件,配置节组装起来,并将核心代码编写为完全业务无关的。我们看看Spring是怎么做的。

    首先,IoC,控制反转。Spring 开发的基本思想:面向接口的编程模式。框架做的越多,应该越能发现接口在其中起到的作用,而Spring将这种想法,开始贯彻到业务的开发中了。Bean的Set方法使用接口作为参数,保证其扩展性,实现依赖关系的松偶尔。所谓的控制反转,作为中文更好理解的一个翻译应该是依赖注入,把依赖的类采用接口的方式,利用Set函数,传入Bean的内部,实现与外界的解耦合。这种注入也可作用于构造函数。

    其次,AOP,面向切面的编程方式,我觉得更通俗的说法应该是对容器内的Bean进行方法干涉。被容器中创建的类,看起来执行一个普通的函数调用,因为被容器预处理,而会在方法执行前/后进行一些其他的、可配置的操作。当然,这种方法也同样是面向接口的,或者直接使用反射的。利用java.lang.reflect.InvocationHandler接口可以达到这种干涉的效果。下面是转载的一个简单示例。

import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 
 public class DynaProxyHello implements InvocationHandler {
    
    private Object proxy;
   
    private Object delegate;

   
    public Object bind(Object delegate,Object proxy) {
        
        this.proxy = proxy;
        this.delegate = delegate;
        return Proxy.newProxyInstance(
                this.delegate.getClass().getClassLoader(), this.delegate
                        .getClass().getInterfaces(), this);
    }
   
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        Object result = null;
        try {
            //反射得到操作者的实例
            Class clazz = this.proxy.getClass();
            //反射得到操作者的Start方法
            Method start = clazz.getDeclaredMethod("start",
                    new Class[] { Method.class });
            //反射执行start方法
            start.invoke(this.proxy, new Object[] { method });
            //执行要处理对象的原本方法
            result = method.invoke(this.delegate, args);
//            反射得到操作者的end方法
            Method end = clazz.getDeclaredMethod("end",
                    new Class[] { Method.class });
//            反射执行end方法
            end.invoke(this.proxy, new Object[] { method });

        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

}

    

public class Test {
    public static void main(String[] args) {
        IHello hello = (IHello)new DynaProxyHello().bind(new Hello(),new LoggerOperation());
        hello.sayGoogBye("Double J");
        hello.sayHello("Double J");
        
    }
}


     当然,不是只有这一个实现方式,java的代理功能只能代理接口,如果要代理类的化,可以使用cglib。

    Spring框架当然不会是上述的那么简单(实际上它非常复杂),不过我关注的是核心的实现方式和设计思想。在有些时候,我们不需要使用Spring,甚至不能使用Spring(比如不用Java开发),但是这种思想和方式是可以复用的。使用这种设计思想,按照当前的语言和环境要求,实现自己的IoC和AOP框架。
分享到:
评论

相关推荐

    以注解方式模拟Spring IoC AOP

    在Spring框架中,依赖注入(Inversion of Control, IoC)和...虽然这种模拟简化了Spring的复杂性,但其核心思想是一致的:降低耦合,提高可维护性和可扩展性。理解并实践这些概念,对于掌握Spring框架的精髓至关重要。

    Spring IOC AOP MVC 简单例子

    IOC,也称为控制反转,是一种设计模式,其核心思想是将对象的创建和管理交给容器来处理,而不是由对象自身负责。Spring框架的IOC容器负责创建对象、管理对象之间的关系以及执行对象的生命周期方法。例如,`SpringIOC...

    myeclipse spring IOC和AOP 例子

    控制反转是一种设计模式,它的核心思想是将对象的创建和管理交由容器负责,而不是由对象自身来创建和管理。在Spring中,这个容器就是ApplicationContext。以下是如何在Spring中声明和注入bean: 1. **Bean的声明**...

    Spring IOC和Spring AOP_spring aop_springIOC

    Spring的IOC,也称为控制反转,它是一种设计思想,核心就是将对象的创建和管理权交给容器,而不是由代码直接创建。这样做的好处在于,开发者不再需要关心对象的生命周期,只需要定义好对象的配置,由Spring容器负责...

    Spring IOC和AOP代码与笔记整理

    Spring框架是Java开发中不可或缺的一部分,它以IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心,极大地简化了企业级应用的开发工作。本篇将深入探讨Spring的这两...

    Spring中IOC/AOP的说明和例子

    **IOC(控制反转)**是Spring的核心特性,它的主要思想是将对象的创建和管理权交给了容器。在传统的程序设计中,我们通常会手动创建对象并管理它们的依赖关系。而在IOC模式下,开发者只需定义对象的接口和实现,...

    Spring3.1 IOC+AOP需要的jar包

    控制反转是一种设计模式,它的核心思想是将对象的创建和管理交给一个外部容器,而不是由对象自身负责。在Spring框架中,这个容器就是ApplicationContext。当使用IOC时,对象之间的依赖关系被反转,不再由对象自己去...

    Spring AOP IOC源码笔记.pdf

    IoC的核心思想是将对象的创建和管理职责从应用程序转移到框架中。在Spring中,这通过BeanFactory和ApplicationContext实现。BeanFactory是Spring的底层容器,负责管理Bean的生命周期,而ApplicationContext提供了更...

    spring ioc di aop详解

    在 Spring 中,IOC(Inversion of Control,控制反转)和 DI(Dependency Injection,依赖注入)是两个核心概念,而 AOP(Aspect Oriented Programming,面向切面编程)则是实现模块化和解耦的重要工具。现在,我们...

    Spring核心IoC和AOP的理解

    Spring核心IoC和AOP的理解 本文主要介绍了Spring核心IoC和AOP的相关知识,涵盖了IoC和AOP的概念、特点、优点和应用场景等方面的内容。 一、IoC(Inversion of Control) IoC是一种设计模式,目的是为了降低应用...

    SpringIOC和AOP原理设计模式

    Spring框架的核心特性主要体现在Spring的IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)上。这两个概念在实际的软件开发中扮演着非常重要的角色,能够极大地提高代码的...

    Spring中IOC(反转控 制) 和 AOP(面向方面编程)

    在Java世界里,Spring框架是应用最广泛的轻量级框架之一,它的核心特性包括IOC(Inversion of Control,反转控制)和AOP(Aspect Oriented Programming,面向方面编程)。这两个概念是Spring框架的灵魂,极大地提升...

    spring教程 ioc aop

    通过学习这个教程,你将掌握Spring的IOC和AOP核心概念,并了解如何将Spring与Hibernate整合,提升你的Java企业级应用开发能力。文件"Spring-T1 (Ioc+SSH整合)"着重于IOC和SSH(Spring、Struts、Hibernate)的整合,...

    spring之ioc和aop

    Spring框架是Java开发中的核心组件,它以Inversion of Control(IoC)和Aspect-Oriented Programming(AOP)两大核心理念为基础,极大地简化了企业级应用的开发工作。让我们一起深入探讨这两个重要概念。 **IoC...

    Spring IOC AOP

    Spring IOC的核心思想是将对象的创建和管理交给Spring容器,而不是由类自身负责。通过这种方式,对象之间的依赖关系被反转,从而降低了组件之间的耦合度。Spring容器通过XML、注解或者Java配置来管理Bean的生命周期...

    小马哥讲 Spring AOP 编程思想 - API 线索图.pdf

    - **容器(1对1关联)**:此处可能指的是Spring IoC容器与AOP配置的一对一关联。 - **PointcutAdvisor(切点通知器)**:一个组合了Pointcut和Advice的接口,用于将切点和通知结合在一起。 - **...

    Spring中IOC和AOP的深入讲解

    在本篇文章中,我们将深入讲解 Spring 中的两个核心概念:Inverse of Control(IOC)和 Aspect-Oriented Programming(AOP)。我们将通过示例代码和详细的解释,逐步介绍 Spring 中的 IOC 和 AOP 的概念和实现方式。...

    IOC和AOP深刻理解基础代码测试

    首先,让我们来看看IOC,它是一种设计原则,核心思想是将对象的创建和管理权交给外部容器,而不是由对象自身负责。在传统编程中,我们经常看到类直接创建所需依赖的对象,这种方式导致了紧密耦合,不易于测试和重用...

    Spring IOC容器实现分析.pdf 下载

    五、Spring AOP与IOC的关系 Spring的另一个核心特性是AOP(面向切面编程),它和IOC容器紧密相关。AOP允许开发者定义横切关注点,如日志、事务管理等,然后在合适的时间点自动插入到业务逻辑中。在Spring中,AOP...

Global site tag (gtag.js) - Google Analytics