题型
单选 多选 判断 填空 简答 编程
查看说明
不定时更新,所以查看时,随机刷新网页以获取最新内容
一、选择
- spring框架采用Java的反射机制进行依赖注入。
- spring中Bean的默认作用域为singleton。
- SpringMVC通过DispatcherServlet来对请求进行统一分发处理,从而转发给相应的业务控制类。
- 在Spring配置文件中为JDBC配置事务时,需要做四步工作,它们的正确顺序是配置数据源,配置事务管理器,配置事务增强,配置事务增强切面。
- SpringMVC中若要让控制器类被扫描到,需要在配置文件中声明spring-context
- 在SpringMVC中,下述方法可以用于接收请求参数name值的是register(@RequestParam String name)
- MyBatis通过映射文件进行输入参数映射时,输入参数的类型可以是基本数据类型,Pojo类型,List类型,Map类型。
- Spring的主要功能有:依赖注入、控制翻转、面向切面、可以与多种ORM框架整合、独立的MVC框架、可作为Web服务器使用
- 以下注解是Spring用来装配所依赖Bean的是@Componen
- Spring AOP的通知类型包括:环绕通知、异常通知、后置返回通知、后置最终通知
- 下列AspectJ注解用于定义切入点的是 @Pointcut
- 下列在编程中不需要“池化”的对象是pojo对象
- 对于Bean的作用域:A:singleton;B:prototype;C:request;D:session;按其生命期长度由小到大来排列顺序为prototype<request<session<singleton
- SpringMVC中使用占位符的映射@RequestMapping(“/text/${xxx}/xxx”),可以通过@ pathVariable(“xxx”)来得到占位符的信息。
- Spring AOP的通知类型不包括超级通知
- 给定切点表达式 execution(* com… *. *Service. *(…)),下列说法正确的是( )
- 一个Bean被IoC容器创建过程中,调用到的方法种类有( )
- 以下资源哪些是在Spring和MyBatis整合时需要配置在applicationContext.xml中的( )。
- MyBatis和Spring框架整合时所需要加入下列哪些JAR包MyBatis框jar、Spring框架的jar、数据库驱动jar、整合的中间jar
- 在下面代码片段中使用@Controller注解装配了Bean,Bean的id是testController。
@Controller
public class TestController{
...
}
二、简答题
-
Spring注解中@Autowired和@Resource的区别
@Autowired属于spring,而@resource属于J2EE
@Autowired默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false
@Resource,默认安装名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。 -
请简述AOP的原理?AOP有何应用价值
原理:
AOP,即面向切面编程。AOP 代理其实是由 AOP 框架动态生成的一个对象,该对象可作为目标对象使用。AOP 代理包含了目标对象的全部方法,但 AOP 代理中的方法与目标对象的方法存在差异:AOP 方法在特定切入点添加了增强处理,并回调了目标对象的方法。
应用价值:
通过 AOP 来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等,AOP 已经成为一种非常常用的解决方案。降低了系统耦合,减少了重复代码,提高了可维护性。 -
springMVC可以实现的功能
MVC模式提供了一个分层的体系结构,其中每一层对其它层进行了抽象,分离Model,View,Controller,简化了开发。其中:
模型(Model):应用程序所使用的特定域信息的表现形式
视图(View):域模型的表现形式(通过使用诸如输入元素和按钮之类的用户界面元素,而这些元素与模型进行交互)。
控制器(Controller):主要负责解释用户的输入并转换为模型,然后将转换后的结果显示给用户。
-
Spring框架中,什么是控制反转?什么是依赖注入?有何区别?
控制反转:将组件间的依赖关系从程序的内部交给了IOC容器管理,也就是将创建bean的过程给反转了。传统的方式需要自己创建实例,现在在需要时只需要在IOC中获取即可。
依赖注入:将组建的依赖通过外部的参数或其他的形式注入。
区别:依赖反转和依赖注入其实是对同一件事情在不同角度的不同表述,依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。 -
事务的四个特性和每种特性的说明
- 原子性:指事务包含的操作要么全部成功,若有一个失败,则全部回滚。操作失败对数据库不会产生任何影响。即要么全都执行,要么都不执行。
- 一致性:指事务必须使数据库从一个一致性的状态换到另一个一致性的状态。
- 隔离性:多事务并发时,一个事事务的执行不影响其他事务。
- 持久性:已经提交的事务对数据库的修改应该永久保存在数据库中。
- 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、前端控制器向用户响应结果。 - 简述Spring Bean的实例化有哪几种常见的方法及过程
方法:四种。
- setter注入方法:
- 构造函数:按照构造函数参数的顺序和个数来注入bean
- 静态工厂:静态工厂方式需要配置class工厂类,也就实现实例化类的静态方法所属的类,factory-method是实现实例化类的静态方法;
- 实例工厂:
- 在MyBatis开发中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?
工作原理 :Dao接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Dao接口生成代理proxy对象,代理对象proxy会拦截接口方法,转而执行MappedStatement所代表的sql,然后将sql执行结果返回。
能重载吗 :首先是不能重载的,因为mybatis动态代理寻找策略是 全限定名+方法名。不涉及参数,dao层中接口的方法名与xml中的标签id值是一致的,一旦出现方法重载之后就可会出现相同的方法名,xml中的id也是重名的了,所以不支持重载。 - Spring控制器接受请求参数的常见方式有哪几种。
- 通过实体bean接收请求参数
- 通过处理方法的形参接收请求参数
- 通过HTTPServletRequest接收请求参数
- 通过@PathVariable接收URL中的请求参数
- 通过@RequestParam接收请求参数
- 通过@ModeAttribute接收请求参数
- 请简述MyBatis框架的优势。
sql写在xml文件中,便于统一管理和优化,解除sql和程序代码的耦合。
提供映射标签,支持对象和和数据库orm字段关系的映射,支持对象关系映射标签,支持对象关系的组建
提供xml标签,支持编写动态sql。 - 请简述一下MyBatis的缓存分类和实现方法。
- 一级缓存:
- 二级缓存:
- 在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>
三、编程
- 在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_______;
}
- 使用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()____________;
}
- 编写业务类UserService,包括addUser()、deleteUser()、updateUser()、queryUser()四个方法,使用Spring配置文件为UserService类配置事务管理;要求addUser()、deleteUser、updateUser()必须具有事务;queryUser()方法可以有事务,也可以没有。addUser()和updateUser()的隔离级别设置为可重复读Isolation.REPEATABLE_READ,其它方法使用默认隔离级别。