Spring知识点总结
Spring知识点总结
1. 简介⼀下Spring框架。
答:Spring框架是⼀个开源的容器性质的轻量级框架。主要有三⼤特点:容器、IOC(控制反转)、AOP(⾯向切⾯编程)。
2. Spring框架有哪些优点?谈谈你的看法。
答:Spring框架主要有三⼤优点:
(1) 容器。Spring框架是⼀个容器,能够管理项⽬中的所有对象。
(2) IOC(控制反转)。Spring将创建对象的⽅式反转了,从程序员⾃⼰创建反转给了程序。
(3) AOP(⾯向切⾯)。⾯向切⾯编程,简⽽⾔之,就是将纵向重复的代码横向抽取出来。Spring框架应⽤了⾯向切⾯的思想,主要体现在为容器中管理的对象⽣成动态代理对象。
3. 什么是IOC?
答:IOC:控制反转,指得是将对象的创建权反转给Spring。作⽤是实现了程序的解耦合。、
4. 什么是DI?
答:DI:依赖注⼊,需要有IOC环境,在Spring创建Bean对象时,动态的将依赖对象注⼊到Bean对象中去。依赖注⼊最⼤的好处就是解耦合。
5. 你对Spring框架中的BeanFactory接⼝和ApplicationContext接⼝有什么理解?⼆者有什么区别?
答:BeanFactory接⼝是Spring框架的顶层接⼝,是最原始的接⼝,通过n e w (BeanFactory的实现类)来启动Spring容器时,并不会创建Spring容器⾥⾯的对象,只有在每次通过getBean()获得对象时才会创建。
ApplicationContext接⼝是⽤来替代BeanFactory接⼝的,通过n e w (ApplicationContext接⼝的实现类)ClassPathXmlApplicationContext来启动Spring容器时,就会创建容器中配置的所有对象。
6. Spring中的⼯⼚容器有哪两个,它们的区别是什么?
答:BeanFactory和ApplicationContext。
BeanFactory接⼝是Spring框架的顶层接⼝,是最原始的接⼝,ApplicationContext是对BeanFactory扩展,BeanFactory在第⼀次getBean时才会初始化Bean, ApplicationContext是会在加载配置⽂件时初始化Bean。
BeanFactory beanFactory =new XmlBeanFactory(new ClassPathResource("l"));
IHelloService helloService =(IHelloService) Bean("helloService");
helloService.sayHello();
我们刚开始学习⽤spring创建Bean对象的时候,最先学的是通过配置<Bean>标签的形式,这⼀块有很多的知识点需要我们掌握。
7. 谈谈你对Spring容器中Bean标签的理解。
答:Bean标签⽤来描述Spring容器管理的对象。
假如有⼀个User对象,需要交给Spring容器来管理,这样就需要在Spring容器的主配置⽂件中通过Bean标签来描述该对象。Bean标签常见的属性有以下⼏个:
name属性:给被管理的对象起个名称,获得对象时要根据该名称来获得。
class属性:被管理对象的完整类名。
scope属性:scope属性常见的有两个属性值,singleton和prototype,这两个属性值⽤ 来指定创建对象时是单例还是多例,默认
为singleton(单例),但在整合整合struts2 时,ActionBean必须配置为多例的.
8. Spring通过配置<bean>标签来⽣成Bean对象有哪三种⽅式?
答:空参构造⽅式、静态⼯⼚⽅式和实例⼯⼚⽅式。⼀般都只会⽤空参构造⽅式。如下:
<bean id="bean1"class="cn.itcast.spring.b_instance.Bean1"></bean>
9. Spring框架中属性注⼊有哪⼏种⽅式:
答:Spring中的输⼊注⼊⽅式包括set⽅法注⼊、构造函数注⼊、p名称空间注⼊、spel注⼊,除此之外,还包括复杂⽅式注⼊,如数
组、List、Map、Properties等属性的注⼊。
10. 简述⼀下bean的⽣命周期?
答:bean的⽣命周期包括bean的定义、bean的初始化、bean的调⽤和bean的销毁。
在配置⽂件⾥⾯通过<bean></bean>来完成bean的定义,通过配置init-method属性来完成bean的初始化,通过得到bean的实例对象来完成bean的调⽤,通过配置destory-method属性来完成bean的销毁。
11. 简述⼀下bean的作⽤域?
答:bean有5种作⽤域,分别是singleton(单例,默认)、prototype(默认)、request、session、globalSession。
session和application的区别singleton
当⼀个bean的作⽤域为singleton, 那么Spring IoC容器中只会存在⼀个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同⼀实例。
prototype
Prototype作⽤域的bean会导致在每次对该bean请求(将其注⼊到另⼀个bean中,或者以程序的⽅式
调⽤容器的getBean() ⽅法)时都会创建⼀个新的bean实例。根据经验,对所有有状态的bean应该使⽤prototype作⽤域,⽽对⽆状态的bean则应该使⽤ singleton作⽤域
request
在⼀次HTTP请求中,⼀个bean定义对应⼀个实例;即每次HTTP请求将会有各⾃的bean实例, 它们依据某个bean定义创建⽽成。该作⽤ 域仅在基于web的Spring ApplicationContext情形下有效。
session
在⼀个HTTP Session中,⼀个bean定义对应⼀个实例。该作⽤域仅在基于web的Spring ApplicationContext情形下有效。
global session
在⼀个全局的HTTP Session中,⼀个bean定义对应⼀个实例。典型情况下,仅在使⽤portlet context的时候有效。该作⽤域仅在基
于 web的Spring ApplicationContext情形下有效。
以上讲了Spring容器的常见配置,⽐如向Spring容器中注册⼀个对象,需要在Spring的主配置⽂件中⽤Bean标签来描述该对象,在实际开发中,⼀个项⽬中会有特别多的对象,如果都⽤Bean标签来配置,未免太过⿇烦了。基于此,Spring容器为我们提供了注解的概念,⽤注解来代替配置。
如何使⽤Spring中的注解?
在使⽤注解之前,要先在spring的主配置⽂件中通过Context:component-scan标签来开启使⽤注解的开关。
12. ⽤注解将对象注册到Spring容器当中,有⼏种注解⽅式?它们有什么区别吗?
答:4种。分别是:@Component()、@Service()、@Controller()、@Respository()。
Spring框架最早出现的只有@Component()注解,但如果所有的对象都使⽤同⼀个注解,很难区分对象究竟属于哪⼀层架构。基于
此,Spring⼜推出了@Service()、@Controller()、@Respository()三种注解,⽤于区分对象属于哪⼀层架构。但4种注解⽅式从功能上来说没有任何区别。
13. Spring框架中,什么注解可以⽤来指定对象的作⽤范围?
答:@Scope(scopeName=”singleton”)。
14. 如何⽤注解的⽅式来完成属性注⼊?
答:按类型分可以分为值类型注⼊和引⽤类型注⼊。
值类型注⼊可以通过@Value()注解来完成,该注解既可以声明在属性上,也可以声明在⽅法上,建议声明在⽅法上,但是更多的⼈会声明在属性上,因为更⽅便。
引⽤类型注⼊可以通过三种注解⽅式来完成,分别为:@Autowired、@Autowired和@Qualifier()⼆者结合、@Resource()。建议使
⽤@Resource(),但是⼀般我都会⽤@Autowired。
Spring中的AOP
1. 谈谈你对AOP的理解。
答:AOP,⾯向切⾯编程。简单来讲就是将纵向重复的代码,横向抽取出来。
很明显的⼀个体现就是在Filter过滤器中。在没有Filter之前,解决servlet的乱码问题是很复杂的,每次在接收请求之前,都要写句代码来解决乱码问题,即:request.setCharacterEncoding(“UTF-8”),只要写⼀个servlet,就是写这句代码来解决乱码问题。直到有⼀天,Filter出现了。我们把解决乱码的那句代码放到Filter中去,从此在servlet中,就再也不⽤重复写那句代码了。从架构上来说,Filter解决乱码的事架在了所有的servlet上,这样⼀来,切⾯就形成了。
⾯向切⾯编程的思想,还有⼀个直接的体现就是在中。(后⾯待补充)
2. Spring中的AOP思想靠什么来体现的呢?
答:Spring中的AOP思想体现在能够为容器中管理的对象⽣成动态代理对象。
3. aop名词学习
Joinpoint(连接点):⽬标对象中,所有可以增强的⽅法
Pointcut(切⼊点):⽬标对象,已经增强的⽅法。
Advice(通知/增强):增强的代码
Target(⽬标对象):被代理对象
Weaving(织⼊):将通知应⽤到切⼊点的过程
Proxy(代理):将通知织⼊⽬标对象之后,形成代理对象
Spring中的AOP
1. 谈谈你对AOP的理解。
答:AOP,⾯向切⾯编程,是对OOP(⾯向对象编程)的补充和完善。简单来讲就是将纵向重复的代码,横向抽取出来。
很明显的⼀个体现就是在Filter过滤器中。在没有Filter之前,解决servlet的乱码问题是很复杂的,每次在接收请求之前,都要写句代码来解决乱码问题,即:request.setCharacterEncoding(“UTF-8”),只要写⼀个servlet,就是写这句代码来解决乱码问题。直到有⼀天,Filter出现了。我们把解决乱码的那句代码放到Filter中去,从此在servlet中,就再也不⽤重复写那句代码了。从架构上来说,Filter解决乱码的事架在了所有的servlet上,这样⼀来,切⾯就形成了。
⾯向切⾯编程的思想,还有⼀个直接的体现就是在中。(后⾯待补充)
2. Spring中的AOP思想靠什么来体现的呢?
答:Spring中的AOP思想体现在能够为容器中管理的对象⽣成动态代理对象。
以前我们要使⽤动态代理,我们需要⾃⼰调⽤下⾯的⽅法:
⽣成代理对象。
Spring能帮助我们⽣成代理对象。
为什么叫springAOP呢?
Spring可以为所有service层的类⽣成动态代理对象,告诉spring,为每⼀个service层的类⾥⾯的⽅法添加管理事务的代码,spring⼀听,是!这样我们叫可以只写⼀遍管理事务的代码,就为所有的service就都加上了管理事务的代码。这样⼀来,aop思想就体现出来了。
SpringAOP的本质就是帮我们⽣成动态代理对象。
Spring实现AOP的原理?
答:JDK动态代理和cglib代理。
JDK动态代理有缺陷,就是被代理对象必须实现接⼝才能产⽣代理对象,如果没有接⼝,就不能使⽤动态代理技术。我们⽤spring容器来实现动态代理,假如要管理的对象没有实现接⼝,那么就不能产⽣代理对象了。为了让所有的对象都能产⽣动态代理对象,Spring⼜融⼊了第三⽅代理技术cglib代理。Cglib可以对任何类⽣成代理对象,它的原理是对⽬标对象进⾏继承代理,如果⽬标对象被final修饰,那么该类⽆法被cglib代理。
那么Spring到底使⽤的是JDK代理,还是cglib代理呢?
答:混合使⽤。如果被代理对象实现了接⼝,就优先使⽤JDK代理,如果没有实现接⼝,就⽤⽤cglib代理。
3. aop名词学习
Aspect(切⾯):通知和切⼊点的结合。在SpringAOP中,切⾯通过带有@Aspect注解的类实现。
Joinpoint(连接点):⽬标对象中,所有可以增强的⽅法
Pointcut(切⼊点):⽬标对象中,已经增强的⽅法。
Advice(通知/增强):增强的代码
Target(⽬标对象):被代理对象
Weaving(织⼊):将通知应⽤到切⼊点的过程
Proxy(代理):将通知织⼊⽬标对象之后,形成代理对象
4. Spring切⾯可以应⽤5种类型的通知,哪5种?
答:前置通知(Before)、后置通知(After,在⽅法完成之后调⽤通知,⽆论⽅法执⾏是否成功)、后置通知(After-returning,在⽅法成功执⾏之后调⽤通知)、异常通知(After-throwing,在⽅法抛出异常后调⽤通知)、环绕通知(Around,在⽬标⽅法之前之后都调⽤)。
5. Spring中应⽤aop,需要哪些步骤?
答:(1)导包
(2)准备⽬标对象
(3)准备通知
(4)将通知织⼊⽬标对象中
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论