spring-ioc和aop

分类: Java

IOC:反转控制

在应用程序中的组件需要获取资源时,传统的方式是组件主动从容器中获取所需要的资源,在这样的模式下开发人员往往需要知道在具体的容器中特定资源的获取方式;反转控制的思想完全颠覆了应用程序组件获取资源的传统方式:反转了资源的获取方向--改由容器主动的将资源推送给需要的组件,开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源的方式即可。这种行为也称为查找的被动形式。

DI:依赖注入

IOC的另一种表述方式:即组件以一些预先定义好的方式(例如:setter 方法)接受来自于容器的资源注入。相对于IOC而言,这种表述更直接,IOC 描述的是一种思想,而DI 是对IOC思想的具体实现。

IOC容器在Spring中的实现

1)在通过IOC容器读取Bean的实例之前,需要先将IOC容器本身实例化。
2)Spring提供了IOC容器的两种实现方式
① BeanFactory:IOC容器的基本实现,是Spring内部的基础设施,是面向Spring本身的,不是提供给开发人员使用的。
② ApplicationContext:BeanFactory的子接口,提供了更多高级特性。面向Spring的使用者,几乎所有场合都使用ApplicationContext而不是底层的BeanFactory。

图片1.png

bean的作用域

在spring中,可以在元素的scope属性里设置bean的作用域,以决定这个bean是单实例的还是多实例的。
默认情况下,Spring只为每个在IOC容器里声明的bean创建唯一一个实例,整个IOC容器范围内都能共享该实例:所有后续的getBean()调用和bean引用都将返回这个唯一的bean实例。该作用域被称为singleton,它是所有bean的默认作用域。

bean.png

singleton: 单例的(默认值), 在整个IOC容器中只能存在一个bean的对象. 而且在IOC容器对象被创建时,就创建单例的bean的对象. 后续每次通过getBean()方法获取bean对象时,返回的都是同一个对象.
prototype: 原型的/多例的,在整个IOC容器中可有多个bean的对象。 在IOC容器对象被创建时, 不会创建原型的bean的对象。 而是等到每次通过getBean()方法获取bean对象时,才会创建一个新的bean对象返回.
request: 一次请求对应一个bean对象
session: 一次会话对应一个bean对象

当bean的作用域为单例时,Spring会在IOC容器对象创建时就创建bean的对象实例。而当bean的作用域为prototype时,IOC容器在获取bean的实例时创建bean的实例对象。

bean的生命周期

1)Spring IOC容器可以管理bean的生命周期,Spring允许在bean生命周期内特定的时间点执行指定的任务。
2)Spring IOC容器对bean的生命周期进行管理的过程:
① 通过构造器或工厂方法创建bean实例
② 为bean的属性设置值和对其他bean的引用
③ 调用bean的初始化方法
④ bean可以使用了
⑤ 当容器关闭时,调用bean的销毁方法
3)在配置bean时,通过init-method和destroy-method 属性为bean指定初始化和销毁方法

AOP

动态代理的原理

代理设计模式的原理:使用一个代理将对象包装起来,然后用该代理对象取代原始对象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。

动态代理的方式

1.基于接口实现动态代理: JDK动态代理
2.基于继承实现动态代理: Cglib、Javassist动态代理

AOP编程操作的主要对象是切面(aspect),而切面模块化横切关注点

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注


Warning: error_log(/www/wwwroot/codegulu.cn/wp-content/plugins/spider-analyser/#log/log-1005.txt): Failed to open stream: Permission denied in /www/wwwroot/codegulu.cn/wp-content/plugins/spider-analyser/spider.class.php on line 2969