SSM框架期末复习

本文深入探讨Spring框架的关键特性,包括依赖注入、控制反转、面向切面编程、MVC模式、事务管理等,详细讲解SpringMVC的工作原理,以及如何在实际项目中运用Spring进行高效开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题型

单选 多选 判断 填空 简答 编程

查看说明

不定时更新,所以查看时,随机刷新网页以获取最新内容

一、选择
  1. spring框架采用Java的反射机制进行依赖注入。
  2. spring中Bean的默认作用域为singleton
  3. SpringMVC通过DispatcherServlet来对请求进行统一分发处理,从而转发给相应的业务控制类。
  4. 在Spring配置文件中为JDBC配置事务时,需要做四步工作,它们的正确顺序是配置数据源,配置事务管理器,配置事务增强,配置事务增强切面
  5. SpringMVC中若要让控制器类被扫描到,需要在配置文件中声明spring-context
  6. 在SpringMVC中,下述方法可以用于接收请求参数name值的是register(@RequestParam String name)
  7. MyBatis通过映射文件进行输入参数映射时,输入参数的类型可以是基本数据类型,Pojo类型,List类型,Map类型
  8. Spring的主要功能有:依赖注入、控制翻转、面向切面、可以与多种ORM框架整合、独立的MVC框架、可作为Web服务器使用
  9. 以下注解是Spring用来装配所依赖Bean的是@Componen
  10. Spring AOP的通知类型包括:环绕通知、异常通知、后置返回通知、后置最终通知
  11. 下列AspectJ注解用于定义切入点的是 @Pointcut
  12. 下列在编程中不需要“池化”的对象是pojo对象
  13. 对于Bean的作用域:A:singleton;B:prototype;C:request;D:session;按其生命期长度由小到大来排列顺序为prototype<request<session<singleton
  14. SpringMVC中使用占位符的映射@RequestMapping(“/text/${xxx}/xxx”),可以通过@ pathVariable(“xxx”)来得到占位符的信息。
  15. Spring AOP的通知类型不包括超级通知
  16. 给定切点表达式 execution(* com… *. *Service. *(…)),下列说法正确的是( )
  17. 一个Bean被IoC容器创建过程中,调用到的方法种类有( )
  18. 以下资源哪些是在Spring和MyBatis整合时需要配置在applicationContext.xml中的( )。
  19. MyBatis和Spring框架整合时所需要加入下列哪些JAR包MyBatis框jar、Spring框架的jar、数据库驱动jar、整合的中间jar
  20. 在下面代码片段中使用@Controller注解装配了Bean,Bean的id是testController
@Controller
public class TestController{
  ...
}

二、简答题
  1. Spring注解中@Autowired和@Resource的区别
    @Autowired属于spring,而@resource属于J2EE
    @Autowired默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false
    @Resource,默认安装名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

  2. 请简述AOP的原理?AOP有何应用价值
    原理
      AOP,即面向切面编程。AOP 代理其实是由 AOP 框架动态生成的一个对象,该对象可作为目标对象使用。AOP 代理包含了目标对象的全部方法,但 AOP 代理中的方法与目标对象的方法存在差异:AOP 方法在特定切入点添加了增强处理,并回调了目标对象的方法。
    应用价值
      通过 AOP 来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等,AOP 已经成为一种非常常用的解决方案。降低了系统耦合,减少了重复代码,提高了可维护性。

  3. springMVC可以实现的功能
    MVC模式提供了一个分层的体系结构,其中每一层对其它层进行了抽象,分离Model,View,Controller,简化了开发。其中:
    模型(Model):应用程序所使用的特定域信息的表现形式
    视图(View):域模型的表现形式(通过使用诸如输入元素和按钮之类的用户界面元素,而这些元素与模型进行交互)。
    控制器(Controller):主要负责解释用户的输入并转换为模型,然后将转换后的结果显示给用户。
    工作流程

  4. Spring框架中,什么是控制反转?什么是依赖注入?有何区别?
    控制反转:将组件间的依赖关系从程序的内部交给了IOC容器管理,也就是将创建bean的过程给反转了。传统的方式需要自己创建实例,现在在需要时只需要在IOC中获取即可。
    依赖注入:将组建的依赖通过外部的参数或其他的形式注入。
    区别:依赖反转和依赖注入其实是对同一件事情在不同角度的不同表述,依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。

  5. 事务的四个特性和每种特性的说明

  • 原子性:指事务包含的操作要么全部成功,若有一个失败,则全部回滚。操作失败对数据库不会产生任何影响。即要么全都执行,要么都不执行
  • 一致性:指事务必须使数据库从一个一致性的状态换到另一个一致性的状态。
  • 隔离性:多事务并发时,一个事事务的执行不影响其他事务。
  • 持久性:已经提交的事务对数据库的修改应该永久保存在数据库中。
  1. SpringMVC工作原理
    SpringMVC的原理图
    1、用户发送请求到前端控制器(DispatcherServlet)。
    2、前端控制器请求处理器映射器(HandlerMapping)去查找处理器(Handler)。
    3、找到以后处理器映射器(HandlerMappering)向前端控制器返回执行链(HandlerExecutionChain)。
    4、前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去执行处理器(Handler)。
    5、处理器适配器去执行Handler。
    6、处理器执行完给处理器适配器返回ModelAndView。
    7、处理器适配器向前端控制器返回ModelAndView。
    8、前端控制器请求视图解析器(ViewResolver)去进行视图解析。
    9、视图解析器向前端控制器返回View。
    10、前端控制器对视图进行渲染。
    11、前端控制器向用户响应结果。
  2. 简述Spring Bean的实例化有哪几种常见的方法及过程
    方法:四种。
  • setter注入方法:
  • 构造函数:按照构造函数参数的顺序和个数来注入bean
  • 静态工厂:静态工厂方式需要配置class工厂类,也就实现实例化类的静态方法所属的类,factory-method是实现实例化类的静态方法;
  • 实例工厂:
  1. 在MyBatis开发中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?
    工作原理 :Dao接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Dao接口生成代理proxy对象,代理对象proxy会拦截接口方法,转而执行MappedStatement所代表的sql,然后将sql执行结果返回。
    能重载吗 :首先是不能重载的,因为mybatis动态代理寻找策略是 全限定名+方法名。不涉及参数,dao层中接口的方法名与xml中的标签id值是一致的,一旦出现方法重载之后就可会出现相同的方法名,xml中的id也是重名的了,所以不支持重载。
  2. Spring控制器接受请求参数的常见方式有哪几种。
  • 通过实体bean接收请求参数
  • 通过处理方法的形参接收请求参数
  • 通过HTTPServletRequest接收请求参数
  • 通过@PathVariable接收URL中的请求参数
  • 通过@RequestParam接收请求参数
  • 通过@ModeAttribute接收请求参数
  1. 请简述MyBatis框架的优势。
      sql写在xml文件中,便于统一管理和优化,解除sql和程序代码的耦合。
      提供映射标签,支持对象和和数据库orm字段关系的映射,支持对象关系映射标签,支持对象关系的组建
      提供xml标签,支持编写动态sql。
  2. 请简述一下MyBatis的缓存分类和实现方法。
  • 一级缓存:
  • 二级缓存:
  1. 在MyBatis框架中,当实体类中的属性名和表中的字段名不一样,怎么办。
  • 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致。
SELECT id,name,pwd as password FROM user where is = #{id};
  • 通过映射字段和实体类属性名的意义对应关系。
<select id="selectUser" resultMap="UserMap">
    select id,name,pwd  from User where id = #{id}
</select>
<resultMap type="User" id="UserMap">
<!-- id为主键 -->
    <id column="id"  property="id"></id>
    <!--column数据库中表的名  property是对应类的属性  -->
    <result column="name" property="name"></result>
    <result column="pwd" property="password"></result>
</resultMap>
三、编程
  1. 在SpringMVC框架中,通过AJAX请求http://localhost:8080/springmvcdemo/getUserList.action 向服务器发送查询用户列表请求,服务器端控制器返回包含所有用户对象User的集合对象userList,请根据此要求在横线处完善下述程序。
@RequestMapping("  / ____getUserList.action_____")
________________
public List< User> getUserList(){
        List<User> list = new ArrayList<User>();
        for (long i = 0; i <=10; i++) {
             __User user = new User______________;
            user.setId(i);
            user.setName("ssm"+i);
            user.setBirthday(new Date());
            ____list.add(user)_____;
        }
          ___return list_______;
    }

  1. 使用mybatis框架完善以下基于user表的CRUD操作。user表所对应的实体类如下:
public class User {
	private int id;
	private String name;
	private int age;
	
	public User(String name,int age){
		this.name=name;
		this.age=age;
	}
	//省略setter和getter
}

(1)请完善sql映射文件"com.qst.mapper.UserMapper"的实现:

<insert id="insertUser" parameterType=" _com.qst.pojo.User_______________">
	__INSERT INTO `user` (`id`, `name`, `age`) VALUES (#{user.id}, #{user. name }, #{user. age })__                                             
</insert>

<delete id="deleteUser" parameterType=" ____Integer____________">
__DELETE FROM `user` WHERE (`id`=#{0})_	                                      
</delete>
		
<update id="updateUser" parameterType=" ____com.qst.pojo.User____________ ">
__UPDATE `user` SET `name`=#{user. name }, `age`=#{user. age } WHERE (`id`=#{user.id})_	                                              
</update>
			
<select id="selectUserById" parameterType="int" resultType=" ___com.qst.pojo.User_____________ ">
____SELECT * FROM `user` WHERE `id` = #{0}__                     
</select>
			
<select id="selectAllUsers"  resultType="___com.qst.pojo.User_____________">
__SELECT * FROM `user` _                           
</select>

(2) 在核心配置文件中配置sql映射文件:

<configuration>
	<!-- 配置映射文件 -->
	<mapper resource="__com/qst/mapper/UserMapper.xml ___"/>
</configuration>

(3)完善以下测试类中对user表的CRUD的操作:

public void insertUser(int id) {
		SqlSession session = sessionFactory.openSession();
		//实例化一个用户
__User user = User("yxz",18)___ ;
//添加上述用户到数据库
___session.insert("“com.qst.mapper.UserMapper. insertUser”,user")____;
//提交事务
_____session.commit()___________;
//关闭session
____session.close()____________;
}
  1. 编写业务类UserService,包括addUser()、deleteUser()、updateUser()、queryUser()四个方法,使用Spring配置文件为UserService类配置事务管理;要求addUser()、deleteUser、updateUser()必须具有事务;queryUser()方法可以有事务,也可以没有。addUser()和updateUser()的隔离级别设置为可重复读Isolation.REPEATABLE_READ,其它方法使用默认隔离级别。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值