【招银网络科技java面试题目面试经验】-看准网
面试官的问题:
问看到简历中的项目,简单介绍一下用到的框架
答这个项目主要是学校实训的项目,给的选题去做的,使用到了SSH的三个框架。其中Spring主要使用了IoC功能,利用Spring的Bean容器去管理action、实体类、持久类的实例(应该再加上sessionFactory,需要将id为sessionFactory的Bean注入到DAO类中);Struts主要用来做MVC层的实现;Hibernate用来做对象持久化
问讲讲对于Spring IoC的理解
答Spring的实现利用了Java的反射机制(还有工厂设计模式、xml配置文件以及、dom4j解析xml文件)。Spring的IoC避免我们在需要一个对象时手动的去创建它,而是将对象的生成由Spring来管理,这是控制反转;而在我们需要的时候,只需要根据设计好的Bean的id就可以让Spring将对应的实例注入到我们需要的地方,这是依赖注入。(IoC是一种设计思想,它的出现致力于设计出更加松耦合的程序,传统的应用程序中类内部主动创建依赖对象,这导致了类与类之间的高耦合,不利于测试,有了IoC之后,我们把创建和查找依赖对象的控制权交给了容器,由容器负责将对象注入,所以对象和对象之间是松耦合的、便于测试的(建议再去了解Spring解决循环依赖的问题,利用hashmap作三级缓存解决))
问讲讲依赖注入如何实现的
答依赖注入使用java 的反射机制实现,java.lang.reflect包(具体实现在Spring中比较复杂,如果不涉及Bean的创建流程的话,面试官期望得到的回答应该是Spring利用Cglib作为默认的实例化策略(动态字节码增强技术),还有一个BeanUtils(Java反射机制))
问讲讲依赖注入的优缺点
答优点:
用Spring替代自己管理实例的注入,尤其在单例的需求上,不用我们自己书写单例模式,只需要在xml或者注解中将scope设置为singleton即可
(1.资源(Bean)的集中管理,实现资源的可配置和易管理)
(2.降低了组件之间的耦合度)
缺点:
1.如果注入对象特别多的时候,比如用构造器注入的时候就会显得冗余,亦会使代码维护上造成困难
2.如果用setter注入的话,就不能将其设为final
3.因为使用反射实现,在实例化以及注入的时候会经历更多的步骤,使得执行效率降低
(1.创建对象的步骤变得复杂)
(2.使用反射来创建对象,在执行效率上会有些损耗,但正因此才提高了程序的灵活性和可维护性)
(3.对于xml方式,IDE的重构支持比较差,比如你修改了类名之后就需要对xml中手动进行修改)
(4.如果用setter注入的话,就不能将其设为final)