spring学习笔记(2) - spring ioc 、aop、DI

二.spring ioc 、aop、DI

1.谈谈对spring ioc和aop的理解

(1)ioc

概念:ioc-控制反转,ioc是一种设计思想,spring中对应ioc容器的实现,主要功能就是将创建对象和对象调用交给spring的对象工厂帮忙创建和管理。

原理:ioc容器就是一个对象工厂,它基于工厂模式利用反射创建对象。

好处:有了ioc,我们不用考虑创建对象时复杂的构造器方法参数该如何填,只需描述需要什么样的对象,配置好配置文件和注解,ioc就会帮我们创建并进行依赖的注入。实际项目中,一个类底层可能依赖几百个类,如果想要示例化该类,需要知道底层类的构造函数是很麻烦的,而使用ioc只要配置好,在该引用的地方引用就行,使得耦合性降低,增强项目可维护性,降低开发难度。

(2)aop

概念:aop-面向切面编程,主要功能是在不改变主干功能代码的前提下,增加额外的功能,对业务逻辑进行解耦合。

原理:spring aop利用动态代理模式,有接口创建接口实现类的代理对象;没有接口创建子类的代理对象。

好处:aop的功能使得代码的可重用性增强,耦合度降低。

2.spring aop和aspectj aop有什么区别

(1)原理

spring aop是基于动态代理,如果要代理的对象实现某个接口,那么spring aop就会用jdk proxy去创建对象,没有的用cglib生成子类的代理对象。

aspectj aop是静态代理的方式

(2)spring aop属于运行时增强,aspectj aop属于编译时增强

(3)使用情况

aspectj框架是java系统中较为完整的aop框架,目前spring5已经整合了aspectj框架,aspectj功能更强大,spring aop相对简单,切面多的时候用aspectj,少的时候二者性能差不多。

3.aop有哪些实现方式

实现aop的技术有两种:

(1)静态代理

编译时就可以生成代理类

(2)动态代理

运行时生成动态代理类:

jdk动态代理-被代理类实现一个接口,spring aop就会用jdk proxy去创建对象

cglib动态代理-被代理类没有实现一个接口,spring aop就会用cglib proxy去创建对象,cglib是一个代码生成的类库,会在运行时生成某个类的子类,他是通过继承方式做的动态代理,如果某个类为fianl,无法使用cglib做动态代理的。

4.什么是依赖注入,可以通过多少种方式完成依赖注入

(1)概念

由容器动态的将依赖关系注入到组件中,将组件和服务连接起来,

通过依赖注入机制,只需要在配置文件中描述出哪些组件需要服务,ioc容器会将他们装配起来;

(2)方式

依赖注入有三种方式:构造函数、set方法、接口;

在spring中用到构造函数和set方法的依赖注入

5.区分构造函数注入和setter注入

xml配置文件中bean的属性注入为<constrution-arg>为构造函数注入,<propertys>为set注入;

构造函数注入不会覆盖set属性,set注入会覆盖set属性;

构造函数任意修改都会创建一个新实例,set不会;

适用设置很多属性,适用设置少量属性

6.区分beanfactory和applicationcontext

二者都是ioc容器的实现,beanfactory接口是懒加载的形式,创建该类型的ioc容器时不会创建对象,而是在第一次调用getbean()时才进行对象的创建,一般供内部开发人员使用;applicationcontext接口是beanfactory的子接口,系统启动的时候对象就进行了加载,调用对象时直接获取就行,供外部人员使用。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值