Dao:数据访问层,提供让Service层调用的接口,更大的时候,Dao层可以是一个项目。

spring整合mybatis自动映射 spring整合mybatis原理_赋值


sqlSession.getMapper();使用的是JDK的动态代理

spring整合mybatis自动映射 spring整合mybatis原理_Java_02


使用时

spring整合mybatis自动映射 spring整合mybatis原理_实例化_03


自定注入的条件:要被Spring管理。被Spring管理的对象叫做Bean@Component注解:表示将生成一个Bean

对象和Bean的区别

1、Bean就是一个Java对象,是Spring帮我们New出来的对象。

2、从Spring容器中拿到的对象,会给对象里面的包含@AutoWired注解的属性进行自动注入赋值。而手动new出来的对象不会自动注入赋值。

spring整合mybatis自动映射 spring整合mybatis原理_spring整合mybatis自动映射_04

Spring容器中的Bean是怎么产生的?

spring整合mybatis自动映射 spring整合mybatis原理_实例化_05


BeanFactory:是一个Bean工厂

手动将Bean添加进Spring中:

bd=new bd();
bd.setbeanClass();
spring.add(bd);

---->BeanDefinition---->Bean

MyBatis是如何注入Spring的?
MyBatis代理对象的类型是?接口,例如UserMapper。我们可以提供一个类,让Spring自动去实例化
但是接口不能实例化,怎么办?如果可以把一个Java对象手动放进Spring容器中,就好了。

将Java对象手动放进Spring容器中三种方式:

1. beanFactory.registerSingleton("userXX",new User())
2. @Bean注解
3. 实现FactoryBean接口:FactoryBean是一个特殊的Bean
FactoryBean和BeanFactory的理解
BeanFactory是Spring里的一个大工厂
FactoryBean是一个小工厂,可以自定义生成的对象

spring整合mybatis自动映射 spring整合mybatis原理_Java_06


spring整合mybatis自动映射 spring整合mybatis原理_spring整合mybatis自动映射_07


MyBatis是使用FactoryBean整合进Spring的。打印对象的时候,调用的是toString方法,会调用到invoke()

spring整合mybatis自动映射 spring整合mybatis原理_实例化_08


spring整合mybatis自动映射 spring整合mybatis原理_Java_09

改进:将类改成活的 Class,使用构造器传入希望生成的Class

spring整合mybatis自动映射 spring整合mybatis原理_Java_10


如果不使用@Component注解呢?

根据不同的Mapper生成不同的bd,从而生成不同的bean

spring整合mybatis自动映射 spring整合mybatis原理_spring整合mybatis自动映射_11


手动实现

spring整合mybatis自动映射 spring整合mybatis原理_赋值_12

@import注解
可以用于导入一个本来不是Bean的类,将它生成一个Bean

spring整合mybatis自动映射 spring整合mybatis原理_Java_13


@Bean明确地指示了一种方法,什么方法呢——产生一个bean的方法,并且交给Spring容器管理测试示例:

spring整合mybatis自动映射 spring整合mybatis原理_赋值_14