什么是spring,ioc,aop 面试题

对spring的理解
1)spring是个轻量级的J2EE框架,是个容器框架,用来装java对象的,是个中间层框架,可以起到一个连接作用
2)能帮助开发人员管理java对象的配置和生命周期, 能实现模块之间,类和类之间的解耦合。
3)核心技术是 ioc(控制反转) ,aop(面向切面编程)
ioc
1)
        引入IOC容器之前,如果一个对象运行中需要另一个对象,必须由自己去创建这个对象, 控制权都在自己手上。
        引入IOC容器之后,两个对象之间失去了直接联系,当一个对象运行到需要另一个对象的时候,IOC容器会主动创建这个对象然后注入到需要的地方。 创建对象的控制权转移给了代码之外的容器,由容器代替开发人员管理对象,创建对象,给属性赋值。
        所以原本两个对象依赖是主动的现在变成了被动的,由容器来管理,控制权颠倒了,所以叫做控制反转
        目的:是减少对代码的改动,也可以实现不同的功能。 实现解耦合(两个对象之间失去了直接联系,需要的时候由 ioc容器创建)
2)
spring容器就是ioc容器,实质上就是很多的Map,里面存的是各种对象,有我们xml中定义的,也有通过我们添加的注解注册到容器中的,也有系统默认注册到容器中的例如环境信息等。Spring容器在启动的时候,就会使用反射创建对象放到这些map里,接下来代码需要用到的里面的对象时,通过di注入。
3)
di(依赖注入)是ioc的具体实现:
ioc容器会创建被调用者实例,然后注入到调用者里面。项目启动的时候就会扫描xml中bean的ref属性根据id注入,也会扫描Autowired或者Resource注解,根据类型或者id注入,id就是对象名

aop

1)

面向切面编程,能在不影响原功能的前提下进行扩展,是方法的增强。

2)

比如:如果要给一些对象的功能上进行相同功能的扩展,但这些功能不是业务代码,不适合写在类中,而且如果每个类都去写会有大量代码重复,aop能帮我们把拓展功能封装成一个切面,根据想要切面执行的位置和时间 ,在目标方法执行的时候,执行切面方法,对原功能进行扩展, 降低了模块间的耦合度,同时提高了系统的可维护性

3)

spring aop是基于动态代理的,是动态代理的规范化,把动态代理的实现步骤,方式都定义好了,让开发人员用一种统一 的方式,使用动态代理。

aop实现是基于代理模式的,主要分为静态代理和动态代理。 静态代理的代表为 AspectJ;动态代理则以 Spring AOP为代表。

AspectJ 是静态代理的增强,静态代理,它会在编译阶段生成AOP 代理类, 将切面织入 Java 字节码中, 运行的时候就是经过增强之后的 AOP 对象,因此也称为编译时增强。

Spring AOP 使用的动态代理,在程序运行时,运用反射机制动态创建代理对象,无需手动编写代码,AOP 框架不会去修改字节码,在特定的切点做了增强处理,并回调原对象的方法。

动态代理主要有两种方式:JDK 动态代理和 CGLIB 动态 代理

jdk动态代理:只能对实现了接口的类生成代理,未实现接口则没办法完成动态代理

1.创建SomeServiceImpl接口实现目标类 ,给它的doSome, doother增加 输出时间,事务。

2.创建InvocationHandler接口的实现类,在这个类实现给目标方法增加功能。

3.使用jdk中类Proxy, 创建代理对象,执行方法。

 CGLib是针对类实现代理,可以在运行时动态的生成指定类的一个子类对象,并覆盖 其中特定方法并添加增强代码,从而实现 AOP

1.目标类不实现接口

2.创建一个 CglibProxy 的类并实现  MethodInterceptor 接口 ,并实现接口的方法

效率:1.8之后jdk代理高于cglib代理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值