转:
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框架中,依赖注入(Inversion of Control, IoC)和...虽然这种模拟简化了Spring的复杂性,但其核心思想是一致的:降低耦合,提高可维护性和可扩展性。理解并实践这些概念,对于掌握Spring框架的精髓至关重要。
IOC,也称为控制反转,是一种设计模式,其核心思想是将对象的创建和管理交给容器来处理,而不是由对象自身负责。Spring框架的IOC容器负责创建对象、管理对象之间的关系以及执行对象的生命周期方法。例如,`SpringIOC...
控制反转是一种设计模式,它的核心思想是将对象的创建和管理交由容器负责,而不是由对象自身来创建和管理。在Spring中,这个容器就是ApplicationContext。以下是如何在Spring中声明和注入bean: 1. **Bean的声明**...
Spring的IOC,也称为控制反转,它是一种设计思想,核心就是将对象的创建和管理权交给容器,而不是由代码直接创建。这样做的好处在于,开发者不再需要关心对象的生命周期,只需要定义好对象的配置,由Spring容器负责...
Spring框架是Java开发中不可或缺的一部分,它以IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心,极大地简化了企业级应用的开发工作。本篇将深入探讨Spring的这两...
**IOC(控制反转)**是Spring的核心特性,它的主要思想是将对象的创建和管理权交给了容器。在传统的程序设计中,我们通常会手动创建对象并管理它们的依赖关系。而在IOC模式下,开发者只需定义对象的接口和实现,...
控制反转是一种设计模式,它的核心思想是将对象的创建和管理交给一个外部容器,而不是由对象自身负责。在Spring框架中,这个容器就是ApplicationContext。当使用IOC时,对象之间的依赖关系被反转,不再由对象自己去...
IoC的核心思想是将对象的创建和管理职责从应用程序转移到框架中。在Spring中,这通过BeanFactory和ApplicationContext实现。BeanFactory是Spring的底层容器,负责管理Bean的生命周期,而ApplicationContext提供了更...
在 Spring 中,IOC(Inversion of Control,控制反转)和 DI(Dependency Injection,依赖注入)是两个核心概念,而 AOP(Aspect Oriented Programming,面向切面编程)则是实现模块化和解耦的重要工具。现在,我们...
Spring核心IoC和AOP的理解 本文主要介绍了Spring核心IoC和AOP的相关知识,涵盖了IoC和AOP的概念、特点、优点和应用场景等方面的内容。 一、IoC(Inversion of Control) IoC是一种设计模式,目的是为了降低应用...
Spring框架的核心特性主要体现在Spring的IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)上。这两个概念在实际的软件开发中扮演着非常重要的角色,能够极大地提高代码的...
在Java世界里,Spring框架是应用最广泛的轻量级框架之一,它的核心特性包括IOC(Inversion of Control,反转控制)和AOP(Aspect Oriented Programming,面向方面编程)。这两个概念是Spring框架的灵魂,极大地提升...
通过学习这个教程,你将掌握Spring的IOC和AOP核心概念,并了解如何将Spring与Hibernate整合,提升你的Java企业级应用开发能力。文件"Spring-T1 (Ioc+SSH整合)"着重于IOC和SSH(Spring、Struts、Hibernate)的整合,...
Spring框架是Java开发中的核心组件,它以Inversion of Control(IoC)和Aspect-Oriented Programming(AOP)两大核心理念为基础,极大地简化了企业级应用的开发工作。让我们一起深入探讨这两个重要概念。 **IoC...
Spring IOC的核心思想是将对象的创建和管理交给Spring容器,而不是由类自身负责。通过这种方式,对象之间的依赖关系被反转,从而降低了组件之间的耦合度。Spring容器通过XML、注解或者Java配置来管理Bean的生命周期...
- **容器(1对1关联)**:此处可能指的是Spring IoC容器与AOP配置的一对一关联。 - **PointcutAdvisor(切点通知器)**:一个组合了Pointcut和Advice的接口,用于将切点和通知结合在一起。 - **...
在本篇文章中,我们将深入讲解 Spring 中的两个核心概念:Inverse of Control(IOC)和 Aspect-Oriented Programming(AOP)。我们将通过示例代码和详细的解释,逐步介绍 Spring 中的 IOC 和 AOP 的概念和实现方式。...
首先,让我们来看看IOC,它是一种设计原则,核心思想是将对象的创建和管理权交给外部容器,而不是由对象自身负责。在传统编程中,我们经常看到类直接创建所需依赖的对象,这种方式导致了紧密耦合,不易于测试和重用...
五、Spring AOP与IOC的关系 Spring的另一个核心特性是AOP(面向切面编程),它和IOC容器紧密相关。AOP允许开发者定义横切关注点,如日志、事务管理等,然后在合适的时间点自动插入到业务逻辑中。在Spring中,AOP...