1 传统的开发步骤, 要配置很多xml文件.
public static void main(String[] args) {
ApplicationContext context = new
ClassPathXmlApplicationContext("applications.xml");
//通过bean的名称获取 bean对象. bean的名称就是xml中bean的id
String bit=(String)context.getBean("bit");
System.out.println(bit); // 小比特
Duck dk=(Duck)context.getBean("d1");
System.out.println(dk); // Duck{name='小比特', age=18}
}
public class Duck {
private String name;
private Integer age;
}
<bean id="bit" class="java.lang.String">
<constructor-arg value="小比特" />
</bean>
<bean id="d1" class="dk.Duck">
<property name="name" ref="bit" /> //ref 指向bit.
<property name="age" value="18" />
</bean>
2 装配Bean的方式.
(1) @Autowired. 属于Spring框架的.
(2) @Resource. JDK提供的注解, 表示资源. JDK只提供了规范, 没提供实现.
3 如果存在同一个类型, 多个实例对象时: 注册Bean (@Bean), 然后交给 Spring来管理.
@Bean
public Map<Integer, String> test1(){
Map<Integer, String> map = new HashMap<>();
map.put(1, "测试1下");
map.put(2, "测试2下");
return map;
}
默认查找bean名称为变量名的bean.
@Autowired
private User user1; //变量名和bean的名称如果不一样就会报错
如果变量名和bean的名称不一样时, 需要手动指定为bean的名称.
(1) @Autowired + Qualifier (“bean的名称”)
@Autowired
@Qualifier("user1")
private User user;
(2) @Resource (name= “bean的名称”)
@Resource("user1")
private User user2;
4 返回的方式.
(1) 返回资源.
转发的写法: 返回 “forward: 资源路径”
重定向的写法: 返回 “redirect: 资源路径”
注意: 资源路径带/, 就是以当前的项目路径为相对位置, 不带/, 就是以当前请求路径为相对位置.
(2) 返回json的数据.
@ResponseBody: 返回 application/json 的数据类型, 返回值会序列化为json字符串.
注意: 无法处理返回值为 null 的情况.
5 Controller中, 请求数据的方式:
(1) 路径变量: url中定义 {变量名}为占位符, 使用 @PathVariable对应变量. @PathVariable 中的值绑定路径变量 (@PathVariable中的"key"要和上面的"key"一样).
@GetMapping("/test/{key}")
public Object test(@PathVariable("key") Integer k){
System.out.println("==============="+test1.get(k));
return test1;
}
如果@PathVariable没有值, 就绑定变量名 (变量名"key"要和上面的"key"一样).
@GetMapping("/test/{key}")
public Object test(@PathVariable() Integer key){
System.out.println("==============="+test1.get(key));
return test1;
}
(2) @RequestParam. 当请求参数是两个及以上时, 获取url中的请求参数. 可以省略注解, 或是省略注解值以变量名匹配请求数据.
@RequestMapping(value = "/test2", method = {RequestMethod.GET, RequestMethod.POST})
// 可以简写为 @GetMapping("/test2")
@ResponseBody
public Object test2(
//可以匹配url中的参数,如请求体k1=v1&k2=v2格式的数据
//x-www-form-urlencoded和form-data的请求数据格式,都可以
@RequestParam("k1") String ksss,//写全的做法,通过注解值为key查找请求数据
@RequestParam String k2,//省略注解值的做法,默认以变量名为key查找请求数据
String k3//最省略的做法:默认就是@RequestParam注解
){}
(3) @RequestBody
请求数据类型为 application/json时, 解析请求体中的json字符串, 为java对象.
(4) 直接使用Servlet中的 request和response对象.
(5) 要注意请求数据是 在 url 中还是 请求体.
6 SpringMVC
(1) 统一数据格式封装.
(2) 统一异常处理.
SpringMVC执行顺序.
SpringMVC的执行流程.
核心:控制反转和面向切面.
首先用户发送请求到前端控制器,前端控制器根据请求信息(如URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分;
页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,并进行验证,然后将命令对象委托给业务对象进行处理;处理完毕后返回一个ModelAndView(模型数据和逻辑视图名);
前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染;
前端控制器再次收回控制权,将响应返回给用户。
7 AOP (“Aspect Oriented Programming”). 即 面向切面编程, 它将业务逻辑的各个部分进行隔离, 使开发人员在编写业务逻辑时可以专心于核心业务, 从而提高开发效率.
AOP应用场景: 需要在具体的业务方法前后, 执行同一业务逻辑处理的代码.
Spring框架实现AOP的方式. Spring框架代理时, 会根据 是否实现接口 来决定使用哪一种动态代理.
(1) JDK 的实现方式.
(2) CGLIB 的实现方式.
8 Spring Bean 的生命周期.
9 MyBatis. 因为操作数据库使用 jdbc不方便, 使用我们设计一个框架, 来更好的操作数据库.
(1) ORM. 对象关系映射. 是为了解决面向对象与关系型数据库存在的不匹配问题.
(2) MyBatis. 可以通过简单的 XML或注解来 配置和映射原始类型, 接口和Java 对象为 数据库中的记录.
(3) Hibernate 和 Mybatis的区别, 以及什么情况下使用.
(4) Mybatis 大概的实现.
(5) Mybatis 在SpringBoot中启动.
@MapperScan (“dk.mapper”). 是扫描 mapper包下带@Mapper注解的类, 通过Mybatis框架, 使用AOP技术 生成代理类.
(6) Mybatis 的使用.