Spring

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 的使用.
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值