第三阶段第二周考试题
1.谈谈对Spring的IoC/DI的理解
我的答案:(满分10分,得分10分)
IOC:是反转控制,或者控制反转的意思,正控的话就是自己创建所需要的对象,而反转控制,就是把创建对象交给Spring容器来创建,像那些共同的代码,例如事务处理,日志文件等也交给Spring容器管理,这样既降低了代码的耦合度,也简化开发,提高代码的复用性.
DI:依赖注入的意思,我们可以通过依赖注入为对象的属性进行注入值,可以通过XML形式和对象的setter方法,在Spring的核心配置文件中为对象的属性赋值,这时该对象的实体类中必须也有对应的setter方法,也可以通过注解的方式为属性进行赋值,这时只需在Spring核心配置文件中添加扫描器,并在实现类中添加注解,此时不需要在xml文件中配置属性的值,也不需要设置setter方法
答案解析:
SpringIoC和DI是同一个概念不同角度的描述.IoC强调对象的创建的权利由Spring完成,DI强调对象的属性由Spring自动的注入值.
2.SpringMVC中,forward和redirect字符串的作用
我的答案:(满分10分,得分10分)
forward:是请求转发,可以请求转发到目标视图,并获取到request作用域中的值,地址栏不会发生改变,不可以重定向到WEB-INF下的j文件中
redirect:是重定向,可以重定向到视图,虽然不可以获取到request作用域中的值,但是可以重定向到WEB-INF下的j文件中,地址栏发生改变
答案解析:
两个字符串的共同功能是使视图解析器的前缀和后缀不再生效.forward的作用是以请求转发的方式跳转到视图页面,redirect是以重定向的方式跳转到视图页面
老师批注:两个字符串的共同功能是使视图解析器的前缀和后缀不再生效
3.@Autowired注解给字段注入值时从容器中获取对象的顺序
我的答案:(满分10分,得分10分)
首先根据对象的类型去找,默认的对象名是类的首字母小写,如果找到了就直接注入,如果找不到,再根据名字去找,相当于通过类型+id去找,找到了就注入,找不到报错
答案解析:
首先按照字段的类型获取,如果没有类型,则会抛出异常.如果有一个匹配的类型就会直接注入;如果有多个匹配的类型,则再寻找名为为字段名的对象.如果能找到则直接注入,如果没有匹配的名字怎抛出异常
4.静态代理和动态代理的区别
我的答案:(满分10分,得分10分)
静态代理是在编译时就确定代理角色和真实角色的关系
静态代理为每一个类都创建一个代理对象,代码冗余量大,而且耦合度较高
动态代理是在运行时才确定代理角色和真实角色的关系;
动态代理中必须实现接口
动态代理为每一个类动态的创建代理对象,降低代码的耦合度
答案解析:
静态代理是在程序运行之前就已经存在了代理对象的字节码,目标对象和代理对象的关系是在程序运行之前就已经确定了.
动态代理是在程序运行之前没有代理对象的字节码,字节码是在程序运行期间有JVM动态的生成.代理对象和被代理对象的关系是在程序运行时才确定了的.
5.使用SpringMVC框架响应一个JSON对象的开发步骤.(前端控制器,Controller控制器已经配置完成)
我的答案:(满分10分,得分5分)
从浏览器端发送一个请求到前端控制器
前端控制器收到浏览器端的请求之后会调用处理器映射器,处理器映射器对请求的url进行解析返回给前端控制器
前端控制器会根据处理映射器返回的结果去调用处理器适配器
处理器适配器通过适配调用Controller控制器
Controller控制器执行完相应的方法返回一个ModelAndView也就是JSON对象给处理器适配器,处理器适配器进一步将JSON对象返回给前端控制器
前端控制器将JSON对象直接响应给浏览器端的当前页面显示,不需要跳转刷新页面
答案解析:
1.导入jackson的依赖
2.创建返回对象的方法,并标注@RequestMapping,指定方法的访问路径
3.方法上标注@ResponseBody注解.
老师批注:@ResponseBody注解
6.Spring的AOP的理解?
我的答案:(满分10分,得分10分)
AOP是面向切面编程,不使用SpringAOP时我们需要对很对对象进行事务管理,日志文件,代码冗余繁琐复杂,而且代码耦合度较高,但使用Spring的AOP面向对象编程,我们可以把项目中的一些共同的操作,例如事务管理,以及日志文件,配置成一个个的切面,将业务与事务处理相分离,提高代码的复用性降低代码的耦合度,简化开发
答案解析:
AOP,一般称为面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。Spring AOP使用的动态代理实现。
7.SpringMVC的流程?
我的答案:(满分10分,得分10分)
浏览器浏览器想前端控制器发送请求
前端控制器调用处理器映射器
处理器映射器根据请求的url进行解析,并返回给前端控制器
前端控制器调用处理器适配器
处理器适配器通过适配调用Controller控制器
Controller控制器返回ModelAndView对象给处理器适配器因为处理器适配器处理不了模型和视图对象,进一步将模型和视图对象返回给前端控制器
前端控制器调用视图解析器,并将具体的视图返回给前端控制器
前端控制器到调用视图,对视图进行渲染之后,返回给前端控制器
前端控制器进一步将内容响应给浏览器客户端
答案解析:
1.用户发送请求至前端控制器DispatcherServlet;
2.DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取
Handle;
3.处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果
有则生成)一并返回给DispatcherServlet;
4.DispatcherServlet 调用 HandlerAdapter处理器适配器;
5.HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);
6.Handler执行完成返回ModelAndView;
7.HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
8.DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
9.ViewResolver解析后返回具体View;
10.DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
11.DispatcherServlet响应用户。
8.有哪些不同类型的IoC(依赖注入)方式?
我的答案:(满分10分,得分4分)
1.XML文件注入
在spring的核心配置文件中设置对象对应的属性名的值,实体类中属性必须有对应的setter方法
2.注解注入
在spring的核心配置文件中配置注解扫描器,在对应的类和对象上添加对应的注解,此时不需要setter方法,也不需要再xml文件中配置属性的值
答案解析:
1.构造器依赖注入:构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。
2.Setter方法注入:Setter方法注入是容器通过调用无参构造器或无参static工厂 方
法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。
9.SpringMVC怎么和前端AJAX交互的?
我的答案:(满分10分,得分8分)
1.AJAX发送请求到前端控制器,
2.前端控制器通过处理器映射器找到相应的处理器,
3.然后调用处理器适配器,处理器适配器找到相应的处理器
4.接收传过来的参数,并对其进行处理,将结果转为JSON对象返回给前端控制器
5.前端控制器将数据响应给AJAX
6.AJAX完成数据的局部刷新
答案解析:
通过 jackson 框架就可以把 java 里面的对象直接转化成 js 可以识别的 json 对象具体步骤如下 :
1.加入jackson相关依赖
2.在接受 Ajax 方法里面可以直接返回 Object,List 等,但方法前面要加上@ResponseBody注解
10.写出Spring常用注解5个
我的答案:(满分10分,得分10分)
@Component
@Service
@Controller
@Repository
@Autowired
答案解析:
@Service、@Repository、@Controller、 @Autowired、@Resource任意五个即可