spring-mybatis的学习

FactoryBean特殊的相当于有两个对象

@ComponentScan("com.springmybatis")
public class SpringMybaitApplication {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
        applicationContext.register(SpringMybaitApplication.class);



        //获取BeanDefinition对象
        AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();

        beanDefinition.setBeanClass(TestFactoryBean.class);
        applicationContext.registerBeanDefinition("user", beanDefinition);
        applicationContext.refresh();
        System.out.println(applicationContext.getBean("user"));
        System.out.println(applicationContext.getBean("&user"));

//        UserService userService = applicationContext.getBean("usrservice", UserService.class);
//        userService.test();

    }
}

在这里插入图片描述
不加&表示生产出来的Bean
加&表示FactoryBean本身

通过构造函数进行赋值来解决生产多个Mapper对象

在这里插入图片描述
在这里插入图片描述

 AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();
    beanDefinition.setBeanClass(TestFactoryBean.class);
    beanDefinition.getConstructorArgumentValues().addGenericArgumentValue(UserMapper.class);
    registry.registerBeanDefinition("user", beanDefinition);

    AbstractBeanDefinition beanDefinition1 = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();
    beanDefinition1.setBeanClass(TestFactoryBean.class);
    beanDefinition1.getConstructorArgumentValues().addGenericArgumentValue(OrderMapper.class);
    registry.registerBeanDefinition("user1", beanDefinition1);

    AbstractBeanDefinition beanDefinition2 = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();
    beanDefinition2.setBeanClass(TestFactoryBean.class);
    beanDefinition2.getConstructorArgumentValues().addGenericArgumentValue(MemberMapper.class);
    registry.registerBeanDefinition("user2", beanDefinition2);

通过list数据结构解决写死的问题

  List<Class> mapprlist=new ArrayList<>();
        mapprlist.add(UserMapper.class);
        mapprlist.add(OrderMapper.class);
        mapprlist.add(MemberMapper.class);


        for (Class mapper : mapprlist) {
            AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();
            beanDefinition.setBeanClass(TestFactoryBean.class);
            beanDefinition.getConstructorArgumentValues().addGenericArgumentValue(mapper);
            registry.registerBeanDefinition("user", beanDefinition);
        }

对于spring来说,不会将接口扫描到容器中,只会讲带有@Component注解的类扫描到容器中

Mybatis只关心接口
在这里插入图片描述
spring默认把一些接口给过滤掉,所以可以继承类改变函数来进行改变行为

在这里插入图片描述
继承ClassPathBeanDefintitionScanner方法进行路劲扫描

mybatis通过sqlSessFactory生成接口代理对象

spring里面的set注入
使用的Mappper是怎么注入的,出现空值怎么解决

路径不能写死,可以通过spring注解进行配置

在这里插入图片描述

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Import(BeanDefinitionRegister.class)
public @interface TestScan {
    String  value();
}
Map<String, Object> annotationAttributes = importingClassMetadata.getAnnotationAttributes(String.valueOf(TestScan.class));
    String path = (String)annotationAttributes.get("value");
    TestMapperScanner scanner = new TestMapperScanner(registry);
    scanner.addIncludeFilter(new TypeFilter() {
        @Override
        public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
            return true;
        }
    });
    int scan = scanner.scan(path);
    System.out.println(scan);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值