Spring考点总结

1、使用aop的好处
(1)降低代码的耦合度;
(2)增强系统的可扩展性能;
(3)提高代码的可复用性。
2、aop中的基本概念
(1)连接点:需要被增强的点,比如一个类中的方法就可以被作为连接点。
(2)切入点:具体被增强的那个方法就称为切入点。
(3)通知:当我们需要对一个类中的某个方法(连接点)进行增强的时候,我们增强部分的代码就作为通知,其中通知的类型有:前置通知、后置通知、返回通知、异常通知、环绕通知。
3、Aop代理的两种方式:JDK动态代理和CGLIB代理
(1)、要实现JDK代理需要有两个关键的类(或接口)InvocationHandler和Proxy代理类。
(2)、要实现cglib代理需要的两个类或者接口MethodIntercepter和Enhancer,cglib可以代理类或者接口,而jdk代理只能代理接口的情况。
4、ioc:控制反转,就是把原先进行对象创建和属性注入的工作反转交给容器进行管理,可以通过xml配置方式,也可以通过注解方式进行管理,实现IOC的基本设计模式就是工厂模式。
5、IOC的好处:
(1)通过容器对系统中的实例对象进行管理,方便高效
(2)降低了类与类之间的耦合度。
6、请谈一谈Spring中自动装配的方式有哪些?
Spring进行自动装配的方式主要有:
(1)no:不进行自动装配,手动设置bean之间的依赖关系;
(2)byName:根据属性的名字进行自动装配,根据属性的名字在IOC容器中去查找和属性名相同的id对应的那个bean对象,将该对象注入给对应的属性;
(3)byType:根据属性的类型去IOC容器中查找对应类型的bean,但是这样就要求容器中只有一个该类型的bean对象。
7、spring中的bean对象的作用域。
Spring中对象的作用域包含四个,分别是:singleton(单例型),prototype(多实例),session(会话),request(请求)。但是在实际的开发中,我们经常用到的两个作用域就是singleton和prototype。
(1)singleton:spring默认的bean对象的作用域就是singleton单例型对象,这种类型的对象默认情况下在容器创建完成之后就已经完成对象的创建,以后需要获取的时候就直接从容器中获取,但是实际上也可以指定采用懒加载的方式完成单例型对象的创建(也就是在使用到的时候才去创建对象),这里就需要用到一个注解:@Lazy。
(2)prototype:可以通过注解@Scope(“prototype”)注解标注该bean对象为多实例对象,也就是在容器进行创建完成时,对象不进行创建,而是在进行获取的时候才创建对象,并且每次获取对象就会创建一个新的对象返回,所以是多实例的。
8、Ioc和DI是什么?DI是如何实现的?
(1)Ioc叫做控制反转,将对象的创建和管理的权限交给容器进行,通过容器实现对象的创建和属性注入。所谓的控制反转就是将bean对象的实际控制权从代码本身转交给容器进行。DI叫做依赖注入,实际上DI是IOC容器管理中的一种,IOC容器管理需要实现对象的创建和属性的注入,所以说两种并不是同一个概念。
(2)DI就是专门实现属性依赖的注入:例如一个类A中有用到了接口B中的方法,那么就需要在类A中依赖于一个接口B的实现类,因此就会产生类之间的依赖关系,传统的做法是在类A中生成一个接口B的实现类对象,但是这样会导致类之间的耦合度太高,代码不易扩展和维护。通过DI可以实现将依赖的注入操作交给容器进行。DI的实现方式主要有两种:
一是、通过构造器注入,就是将属性通过带参构造器进行输入,在创建对象的同时完成对属性的注入,这种方式一般用于哪些必须注入的属性。
二是、通过setter方式进行属性注入。在调用无参构造器创建完对象之后,通过调用setter方法进行属性注入。
9、请说明一下Spring中BeanFactory和ApplicationContext的区别是什么?
BeanFactory是spring中比较原始,比较古老的Factory接口。而ApplicationContext是BeanFactory接口的一个子接口。BeanFactory完成容器的创建之后就不会进行bean对象的创建,而是在进行对象获取的时候才去创建,这样的好处是可以节约资源,坏处是速度会慢。而ApplicationContext在完成容器创建之后会立即完成对singleton类型的bean对象创建。
10、spring中@AutoWired注解和@Resource注解的区别。
共同点:两者都可以实现对bean实例对象的属性进行注入,都可以写在字段和setter方法上,如果两者都写在字段上,那么就不需要定义setter方法。
区别:
(1) 两者的定义来源于不同的规范,首先@AutoWired是spring框架中定义的一个注解,按照类型实现属性的注入,如果允许属性为null值,可以设置required=false,如果我们想根据属性名进行注入,就需要和@Qualifier注解一起使用
(2) 而@Resource是java本身提供的注解,默认按照属性名进行注入,但是该注解有两个重要的属性,name和type。分别表示根据上面类型进行属性注入
11、bean的生命周期
(1)调用构造器进行对象的创建;
(2)在调用初始化方法之前调用一个后置处理器方法(beanPostProcessBeforeInitilization);
(3)调用初始化方法;
(4)在初始化方法之后调用一个后置处理器方法(beanPostProcessAfterInitilization);
(5)使用这个bean对象
(6)对象销毁之后,调用定义的destroy方法。
12、spring支持的事务管理类型有哪些?在实际的项目中你会选择使用哪种方式?
(1)spring支持编程式事务管理和声明式事务管理,许多spring框架的用户选择使用声明式事务管理,因为这种方式和应用程序之间的关联程度较小,更加符合轻量级容器的概念。整体上声明式事务管理要优于编程式事务管理,虽然编程式事务管理比声明式要更加灵活,因为可以通过代码进行业务控制。
13、aop的应用场景有哪些?
Caching 缓存、日志信息管理、事务管理、懒加载等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值