WEB框架 面试题

面试题1、详细谈谈你对Spring的理解(****)?

  Spring框架是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。如果没有Spring,传统的Web后端开发中,是使用EJB完成我们的javaee开发的。当然我对这个EJB也不怎么了解,传统的web后端Service去调用不同的Dao实现类,我们只能手动的在Service中更改,这样的化,Service和dao之间耦合程度就太高了。这个时候,我们想把需要更改的需要设定的Dao实现类放到某个配置文件中,然后去定义一个工具类,去去读配置文件里面的Dao实现类,然后调用反射的思想,就可以Service中创建Dao的实现类。这样的化,Service和Dao之间的依赖关系就会降低。
  Spring主要目的就是为对象直接的依赖关系解耦。通过IOC控制反转,由容器管理对象,对象直接的依赖关系,原先在程序中创建对象的方式更改为由容器完成。对象直接的依赖解耦合

  如果没有Spring,传统的WEB后端开发中,Service中调用Dao层中的对象属性或者方法,比如说我的DAO中有一个UserDao接口,针对MySQL数据库我写了一个UserDaoMysqlImpl,Service中调用的时候只需要UserDao userdao = new UserDaoMysqlImpl();即可使用。如果此时有多个UserDaoOracleImpl,UserDaoHbaseImpl,或者UserDaoSQLServerImpl,每次换不同的数据库,都要在Service 中的UserDao userdao = new UserDaoHbaseImpl()中更换。
  如果此时我们想让Service调用不同的Dao实现类耦合程度更低,不用每次都到代码中更改,我们可以自己在文本文件中定义一个容器,描述好对象的属性值读取自定义的文本文件,通过反射的方式Class.forName(“com.mysql.jdbc.Driver”)创建Service类。参考工程:01-miniSpring
在这里插入图片描述
  关键在于自己写一个Container,负责读取文本,解析每一行,由于UserServiceImpl中有成员变量userDao,因此先要反射创建两个object,然后存放在map<String,object>中,然后还是需要通过反射获得Service对象,然后修改其成员变量的值。
在这里插入图片描述
运行效果:
在这里插入图片描述
  Spring主要目的就是为对象直接的依赖关系解耦,通过IOC控制反转,由容器管理对象,对象直接的依赖关系,原先在程序中创建对象的方式更改为由容器完成。对象直接的依赖解耦合。
什么叫IOC控制反转?
   控制反转包含两层含义:1、控制 2、反转

  1. 控制:控制对象的创建、销毁、属性的赋值,对象的整个生命周期的创建与销毁
  2. 反转与正转相对应,正转是在程序代码中,由开发人员使用new构造器创建对象,开发人员有权限主动创建对象
    反转是将开发人员创建对象的权限转移到代码之外的容器,在程序代码之外,由容器实现对象的创建和属性的赋值

若classB是classA的成员变量,classA使用classB的属性或方法,则classA依赖classB.。
IOC控制反转的实现方式有两种

  1. 依赖查找DL(Dependency Look):sun公司曾经提出过这种方法,通过特定的类和方法在容器中查找对象,把找到的对象赋值给依赖其的对象
  2. 依赖注入DI(Dependency Injection):注入就是赋值的意思,我们只需要提供对象名称给容器,由容器创建对象,查询对象,把找到的对象赋值给依赖其的对象,而不是特定的类。依赖注入是日前最优秀的解藕方式,让Spring的Bean之问以配置文件的方式组织在一起,而不是硬编码方式耦合
      Spring框架使用的就是DI这种技术,所以它特地在网站上表明其特征是DI。 当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。即,不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它

Spring 基于XML和注解的两种方式注入比较

  • 基于XML配置文件方式,配置文件的内容和源代码是完全分离的,修改属性只需要修改配置文件即可,所以可以把经常可能改变的属性值的bean定义在xml中。代码量相对注解方式多,开发效率低。
  • 基于注解的方式开发的效率高,可读性好。缺点在于以硬编码方式写入到Java代码中,需要重新编译代码,而基于XML方式只需重启服务器重新加载即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值