期末考试复习资料
1、SpringIOC的概念
IOC不是一种技术而是一种设计思想,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对 象的创建;
IOC控制反转:Spring提供了IOC容器来帮我们生成所需要的对象。也就是说在我们原先的对象中有用到其他对象的地方Spring会帮我们来注入。不用我们再去考虑这些问题。由容器来帮忙创建及注入依赖对象。
2、SpringMVC相较Servlet充当控制器的好处
1、封装代码、维护成本低、耦合性低。在MVC模式中,三个层各司其职,一旦那一层的需求发生了变化,就只需要更改相应的层中代码而不会影响到其它层的代码。
2、有利于开发中的分工,提高开发效率,在MVC模式中,按层把系统分开,更好的实现开发中的分工。
3、组件重用,有利于代码复用,重用性高。
3、持久层框架MyBatis相较于JDBC的好处
与JDBC相比,减少代码量
最简单的持久化框架、小巧并简单易学
SQL代码从程序代码中彻底分离,可重用,支持编写动态SQL
提供映射标签,支持对象与数据库的关系映射
4、简述RESTful风格接口的特征及好处
是一种面向资源服务的设计方式
它不是不是标准,而是一种设计模式
面向资源,面向服务的思想
使用它可以让接口更加易读
5、利用SpringMVC技术设计一个RESTful风格的产品(Product)模块的Controller,对外提供search、add、update、delete方法接口。
@Controller
@RequestMapping("/")
public class ProductController {
// search
@RequestMapping(value = "/{id}",method = RequestMethod.GET)
public String search(@PathVariable("id")int id)
{
return "";
}
// add
@RequestMapping(value = "/",method = RequestMethod.POST)
public String add(Product product)
{
return "";
}
// update
@RequestMapping(value = "/",method = RequestMethod.PUT)
public String update(Product product)
{
return "";
}
// delete
@RequestMapping(value = "/{id}",method = RequestMethod.DELETE)
public String delete(@PathVariable("id")int id)
{
return "";
}
}
6、Spring提供的AOP技术的实现原理。
1、Spring AOP的面向切面编程,是面向对象编程的一种补充,用于处理系统中分布的各个模块的横切关注点,比如说事务管理、日志、缓存等。
2、它是使用动态代理实现的,在内存中临时为方法生成一个AOP对象,这个对象包含目标对象的所有方法,在特定的切点做了增强处理,并回调原来的方法。
3、Spring AOP的动态代理主要有两种方式实现,JDK动态代理和cglib动态代理。
4、JDK动态代理通过反射来接收被代理的类,但是被代理的类必须实现接口,核心是InvocationHandler和Proxy类。
5、cglib动态代理的类一般是没有实现接口的类,cglib是一个代码生成的类库,可以在运行时动态生成某个类的子类,所以,CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那么它是无法使用CGLIB做动态代理
7、Spring提供的对Service层事务的支持的原理及好处
Spring提供的支持有包括编程式和声明式,在实际应用中,首推声明式事务
在Service中配置事务可以使用注解、xml、JavaConfig配置方式;
其原理是使用ThreadLocal类实现的
基于业务的原则性需求,将一个原子性业务的操作做了事务控制,更加符合现实场景
8、简述ajax原理及在当今行业项目开发中的应用
ajax是异步请求局部刷新
它的底层实现是由XMLHTTPRequest对象实现的,该对象由浏览器提供
在一些热词提示、网络地图上提供了了无刷新效果,增强用户体验度
当前企业中使用ajax非常频繁,尤其在前后端分离的系统中,前端通过ajax与后台进行通信,用json数据进行交互。
9、假设前台通过表单中的文件域上传一张图片、后台使用SpringMVC技术,请书写前后台关键性代码。
前台代码:
<form action="/upload/file" method="post" enctype="multipart/form-data">
<input type="file" name="file" /><br>
<input type="submit" value="上传" />
</form>
后台代码:
@Controller
@RequestMapping("/upload")
public class Upload_Controller {
public String file(@RequestParam("file") MultipartFile file) throw Exception
{
String fileName = file.getOriginalFilename();
File fileObj = new File("文件保存路径\" + fileName);
file.transferTo(fileObj);
}
}
10、原始的使用jdbc查询数据库和 Mybatis查询数据库都要会写代码!!!!
// 原始JDBC查询方法
String sql = "";
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mydbs";
Connection connection = DriverManager.getConnection(url,"root","root");
Statement statement = connection.createStatement();
// 查
ResultSet set = statement.executeQuery(sql);
// 增删改
boolean flag = statement.execute(sql);
=====================================Mybatis方法==========================================
// Mybatis查询方法 创建对象映射
<resultMap id="BaseResultMap" type="com.yue.Model.User">
<id column="id" property="id"/>
<result column="image" property="image"/>
<result column="name" property="name"/>
<result column="password" property="password"/>
// 一对一
<association property="" javaType = "">
// 一对多
<collection property="" javaType = "">
</resultMap>
// 查询语句
<select id = "" resultType = "">
select * from table
</select>
11、Spring常用的注解要会使用!!!!
1、容器注入组件
@Controller:控制层
@Requestmapping():用于映射web请求,包括访问路径和参数;
@ResponseBody:支持将返回值放到response内,而不是页面,返回json数据
@RequestBody:运行request的参数放在request体中,而不是在直接连级的地址后面
@RestController:相当于Controller于ResponseBody
@Service:业务层
@Repository:数据访问层
2、Bean注解
@Autowired:自动注入 (先根据类型再根据属性名称)
@Qualifier:直接指定要自动装配的组件的ID
3、Java 配置类相关注解
@Configuration:声明当前类为配置类 @Bean:注解在方法上,声明当前方法返回值为一个bean
@ComponentScan:对Componen进行包扫描