spring面试题
1、描述spring的ioc和aop
ioc的概念 ioc能解决什么样的问题。
ioc概念:
IoC主要体现两方面:控制&反转,简单而言就是某一接口具体实现类的选择控制权从调用类中移除,转交到第三方决定。IoC在Spring具体体现为依赖注入。
ioc优点:
因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是实现于某种接口的),只要修改XML就可以了,这样我们甚至可以实现对象的热插拔(有点像USB接口和SCSI硬盘了)。
aop的概念,aop能解决什么样的问题。以及aop它的一些术语
aop的概念:
AOP(Aspect Oriented Programing)面向切面编程
aop能解决什么问题:
aop的功能就是用来增强,在执行主业务的通知也顺带执行其他业务。aop一般用来处理权限控制,日志记录,加载事务等非主要业务逻辑的事情
术语:
连接点(JoinPooint):程序执行的某个特定位置,如类的开始初始化前,类的初始化后,类的某个方法调用前/后,方法抛出异常后。一个类或者一段代码拥有一些边界性质的特定点,这就是连接点。Spring仅支持方法的连接点,即仅能在方法调用前,方法调用后,方法抛出异常时及方法调用前后这些程序执行点织入增强;
切点(Pointcut):每个程序类都拥有多个连接点,在多个连接点中定位我们想要的连接点。AOP通过切点定位连接点,切点和连接点不是一对一的关系,一个切点可以匹配多个连接点。。
增强(Advice):增强是织入到目标类连接点上的一段程序代码,Spring中增强除了用于描述一段程序代码外,还拥有另一个和连接点相关的信息,执行点的方位。Spring 提供的接口都是带方位名的:BeforeAdvice、AfterReturningAdvice,等
目标对象(Target):增强逻辑的织入目标类
引介(Introduction):引介是特殊的增强,他为类添加一些属性和方法。
织入(Weaving):将增强添加到目标类的具体链接点的过程。
代理(Proxy):
切面(Aspect):切面由切点和增强组成,他既包括横切逻辑的定义,也包括连接点的定义。
2、spring管理bean的方式有哪几种?
无参构造函数
静态工厂方法
实例化工厂
3、什么是依赖注入?常见依赖注入的方式有哪些?
是指程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是 依赖于外部的 注入。
xml:
set
构造函数
注解:
@AutoWired
@Resources
@Value
4、@AutoWired和@Resources区别
@Autowired注解是按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false。
@Resource注解和@Autowired一样,也可以标注在字段或属性的setter方法上,但它默认按名称装配。名称可以通过@Resource的name属性指定,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。
@Resources按名字,是jdk的,@Autowired按类型,是spring的。
5、spring的生命周期
整体来说就4个步骤:实例化bean,属性赋值,初始化bean,销毁bean
• 首先就是实例化bean,容器通过获取BeanDefinition对象中的信息进行实例化
• 然后呢就是属性赋值,利用依赖注入完成 Bean 中所有属性值的配置注入
• 接着就是初始化bean,如果在配置文件中通过 init-method 属性指定了初始化方法,则调用该初始化方法。
• 最后就是销毁bean,和init-method一样,通过给destroy-method指定函数,就可以在bean销毁前执行指定的逻辑
6、spring常用的注解有哪些?
管理bean的注解 @Component @Controller @Service @Repository
依赖注入的注解 @AutoWired @Resources @Value
生命周期的注解 @PreDestroy @PostConstruct
java配置需要的注解 @Configuration @ComponentScan @PropertySource @Import
7、java配置类上的@Configuration注解是必须要的吗?如果不要会有什么后果
8、什么是事务?事务的特性?事务的隔离级别?事务的传播行为
9、spring是如何整合事务的?
编程式事务 声明式事务 注解式事务
10、spring中用到的代理有哪些
jdk动态代理
cglib字节码代理
11、谈谈你对spring框架的理解
什么是spring?
Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。主要
spring有哪些核心的组件?
包括以下七个模块:
Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等);
Spring Core:核心类库,所有功能都依赖于该类库,提供IOC和DI服务;
Spring AOP:AOP服务;
Spring Web:提供了基本的面向Web的综合特性,提供对常见框架如Struts2的支持,Spring能够管理这些框架,将Spring的资源注入给框架,也能在这些框架的前后插入拦截器;
Spring MVC:提供面向Web应用的Model-View-Controller,即MVC实现。
Spring DAO:对JDBC的抽象封装,简化了数据访问异常的处理,并能统一管理JDBC事务;
Spring ORM:对现有的ORM框架的支持;
spring解决了哪些问题?
spring中避免了关键字new造成耦合的问题;
spring本身就是一个工厂,不需要在编写工厂类了;
spring不在需要就行明确的引用关系传递,直接通过配置完成;
spring是如何解决这些问题的?
spring这个框架帮我们解决了对象初始化的问题,不需要我们每调用一个类都需要我们自己去初始化,
spring都会帮我们自动初始化,需要用的时候自己随时去拿就行了.