Spring经常问的面试题

    xiaoxiao2022-07-07  208

    Spring的面试题

    1.什么是Spring? 答:Spring是java企业级的应用开源开发框架。Spring主要用来开发Java应用,但是有写扩展是针对构建J2EE平台的web应用。Spring框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。 2.使用Spring的好处? 答:1、轻量:Spring是轻量的 ,基本的版本大约2KB。 2、控制反转:Spring通过控制反转实现了松散耦合,对象们给出他 们的依赖,而不是创建或查找依赖的对象们。 3、面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。 4、容器:Spring包含并管理应用中对象的生命周期和配置。 5、MVC框架:Spring的WEB框架是精心设计的框架,是Web框架的一个很好的替代品。 6、事务管理:Spring提供了一个持久的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。 7、异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常。 第二种答案: 答:1、降低了组件之间的耦合性,实现了软件各层之间的解耦。 2、可以使用容易提供的众多服务,如事务管理,消息服务等。 3、容器提供单例模式支持。 4、容器提供了AOP技术,利用她很容易实现如权限拦截,运行期监控等功能。 5、容器提供了众多的辅助类,能加快应用的开发。 6、spring对与主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 7、spring属于低侵入式设计,代码的污染低。 8、独立与各种应用服务器。 9、spring的DI机制降低了业务对象替换的复杂性。 10、Spring的高度开放性,并不强制应用完全依赖Spring,开发者可以自由选择spring的部分或全部。 3.Spring中的核心类有哪些,各有什么作用? 答:BeanFactory产生一个新的实例,可以实现单例模式。 BeanWrapper:提供统一的get及set方法。 ApplicationContent:提供框架的实现,包括BeanFactory的所有功能。 4.Spring中用到的设计模式,并举具体示例? 答:代理模式—在AOP和remoting中被用的比较多。 单例模式—在Spring配置文件中定义的bean默认为单例模式。 工厂模式—BeanFactory用来创建对象的实例。 5.什么是IOC?为什么要用IOC? 答:IOC是控制反转。 创建对象实例的控制权从代码剥离到IOC容器控制(之前的写法,由程序代码直接操作使用new关键字),实际就是你在xml文件控制,控制权的转移时所谓反转,侧重于原理。 第二种:Spring IOC负责创建对象,管理对象(通过依赖注入DI),装配对象,配置对象,并管理这些对象的整个声明周期。 6.什么是AOP?为什么要用AOP? 答:AOP是面向切面编程,是通过动态代理的方式为程序添加统一功能,集中解决一些公共问题。 优点:各个步骤之间的良好隔离性耦合型大大降低。 源代码无关性,再扩展功能的同时不对源码进行修改操作。 7.什么是Spring的事务管理? 答:Spring有两种事务管理。 1.编程式事务,在代码中硬编码。(不推荐使用) 2.声明式事务,在配置文件中配置(推荐使用) 声明式事务分为两种:a.基于xml的声明式事务。 b.基于注解的声明式事务。 8.Spring框架的事务管理有哪些优点? 答:它为不同的事务API如JPA和JDBC,Hibernate,JTA,JDO,提供一个不变的编程模式。 它为编程式事务管理提供了一套简单的API而不是一些复杂的事务API如:支持声明式事务管理。它和Spring各种数据访问抽象层很好得集成。 9.FactoryBean与BeanFactory的区别? 答:BeanFactory式个Factory,也就是IOC容器或对象工厂,FactoryBean是个Bean。在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。但对FactoryBean而言,这个Bean不是简单的Bean,而是一个能生产或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似。 10.Spring中的注解? a.@Repository:标注一个DAO组件类。UserRepository(UserDao) b.@Component:标注一个普通的Spring Bean类。 c.@Controller:标注一个控制器组件类。 d.@Service:标注一个业务逻辑组件类。 e.@Configuration表示该类作为容器来使用。 f.@Required该注解白表明bean的属性必须在配置的时候设置,通过一个bean定义的显示的属性值或通过自动配置,若@Required的bean属性未设置,抛出BeanInitializationException。 g.@Autowired 是我们使用得最多的注解,其实就是 autowire=byType 就是根据类型的自动注入依赖(基于注解的依赖注入),可以被使用再属性域,方法,构造函数上。 h.@Qualifier 就是 autowire=byName, @Autowired注解判断多个bean类型相同时,就需要使用 @Qualifier(“xxBean”) 来指定依赖的bean的id: @Controller @RequestMapping("/user")public class HelloController { @Autowired @Qualifier(“userService”) private UserService userService; i.@Resource 属于JSR250标准,用于属性域额和方法上。也是 byName 类型的依赖注入。使用方式:@Resource(name=“xxBean”). 不带参数的 @Resource 默认值类名首字母小写。 j.@PostConstruct 和 @PreDestroy 不是用于依赖注入,而是bean 的生命周期。类似于 init-method(InitializeingBean) destory-method(DisposableBean) k.@Transactional:事务注解 11.Spring的声明式事务的优缺点? 答:最大的优点就是不需要通过编程的方式管理事务,这样就不需要再业务逻辑代码中参杂事务管理的代码,只需再配置文件中做相关的事务规则声明(或通过基于@Transaction注解的方式),便可以将事务规则应用到业务逻辑中。 缺点:显然声明式事务管理要优于编程式事务管理,主要体现再没有代码的嵌入,不受代码的污染。一个普通的POJO对象,只要加上注解就可以获得完全的事务支持。和编程式事务相比,声明式事务唯一不足地方是,后者的最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。但是即便有这样的需求,也存在很多变通的方法,比如,可以将需要进行事务管理的代码块独立为方法等等。 12.如何启动注解? 答:在Spring配置文件中配置context:annotation-config/元素

    最新回复(0)