java面试题框架篇
springboot aop1.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"/><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: wProxyInstance(类加载器,接口数组,invocationHandler接口)
3.CGlib代理工具API: Enhancer 增强器对象 获取代理对象 ate(); 回调接口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的部分或全部缺点使用到了大量反射机制。反射机制非常占内存。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。