java面试题框架篇

1.Spring框架

1.1Spring两大核心:IOC与AOP

IOC

IOC全称Inversion of Control,即“控制反转”,这是一种设计思想。对象创建的权利由Spring框架完成,由容器管理对象的生命周期。

  1. 原来的对象的创建都是由用户自己手动创建,这样的方式耦合性肯定高,如果类发生了变化,则代码都得修改。
  2. 现在所有的对象都交给Spring容器管理,用户无需关心对象是如何实例化,容器负责对象的注入即可,以后几乎不用修改任何代码,降低了代码的耦合性。
    spring容器怎么创建bean对象?
    spring容器,这个容器指的就是ConCurrentHashMap
    Spring的IOC有三种注入方式 :构造器注入, setter方法注入, 根据注解注入。

DI

DI的意思是依赖注入,和控制反转是同一个概念的不同角度的描述,即应用程序在运行时依赖IOC容器来动态注入对象需要的外部资源。
注入方式
1.set方式注入
2.构造方法注入
3.基于配置文件注入

<bean id = "c" class = "cn.spring.Cat"/>
<bean id = "dog" class = "cn.spring.Dog">
	<property name = "token" value = "111"/> //set方法注入
	<constructor-arg name = "cat" ref = "c"/> //构造方法注入
</bean> 

4.基于注解开发
@Resource
@Autowired

AOP

AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
总结: Spring中的AOP 利用代理对象在不修改源代码的条件下,对方法进行扩展.

切面 = 切入点表达式 + 通知方法

切入点表达式:如果目标对象满足切入点表达式的判断,则spring自动为其创建代理对象
1.bean表达式
根据bean的ID拦截指定的对象
2.within表达式
按照类型匹配,可以使用通配符*号
3.execution表达式
粒度比较细,可以按照方法参数进行匹配
4.@annotation表达式
作用:可以根据用户的自定义注解进行拦截
通知方法:对目标方法进行扩展的封装方法
1.前置通知:在目标方法执行前执行
2.后置通知:在目标方法执行后执行
3.异常通知:目标方法执行报错时执行
4.最终通知:目标方法之后都要执行的通知
5.环绕通知:在目标方法执行前后都要执行,控制目标方法

关于JDK代理和CGlib代理总结(高程/架构)!!!

Spring中默认采用JDK代理,SpringBoot默认采用CGLIB代理。

  1. JDK要求必须有或者实现接口, cglib有无接口都可以创建代理对象.代理对象是目标对象的子类
  2. JDK代理工具API: Proxy.newProxyInstance(类加载器,接口数组,invocationHandler接口)
  3. CGlib代理工具API: Enhancer 增强器对象 获取代理对象 enhancer.create(); 回调接口
    MethodInterceptor接口
  4. JDK中执行目标方法
  • method.invoke(target,args);
    CGlib中执行目标方法
  • method.invoke(target,args);
AOP常用注解
  1. @Aspect 标识切面
  2. @Pointcut 标识切入点表达式 4种写法 2种常用
  3. 五个通知注解
  4. @EnableAspectJAutoProxy(proxyTargetClass = true) //开启AOP
  5. 排序注解 @Order

1.2BeanFactory(懒加载初始bean)和ApplicationContext(立即初始bean) 有什么区别

BeanFactory和ApplicationContext都是接口,并且ApplicationContext是BeanFactory的子接口。同时它们都是spring的容器对象。
BeanFactory:
Spring最顶层的接口,实现了Spring容器的最基础的一些功能, 调用起来比较麻烦, 一般面向Spring自身使用;
BeanFactory在启动的时候不会去实例化Bean,从容器中拿Bean的时候才会去实例化。
ApplicationContext:
是BeanFactory的子接口,扩展了其功能, 一般面向程序员自身使用;
ApplicationContext在启动的时候就把所有的Bean全部实例化了。

1.3Spring框架用到了哪些设计模式

  1. 工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例
  2. 单例模式:Bean默认为单例模式
  3. 代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术
  4. 模板方法模式:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate
  5. 观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现–ApplicationListener

1.4spring框架的优缺点

优点
1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦
2.可以使用容易提供的众多服务,如事务管理,消息服务等
3.容器提供单例模式支持
4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能
5.容器提供了众多的辅助类,能加快应用的开发
6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等
7.spring属于低侵入式设计,代码的污染极低
8.独立于各种应用服务器
9.spring的DI机制降低了业务对象替换的复杂性
10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部
缺点
使用到了大量反射机制。反射机制非常占内存。

1.5Spring常用注解

  1. @Component(任何层) @
  • 10
    点赞
  • 117
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老汤姆.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值