Spring注解方式整合第三方框架

目录

Spring整合MyBatis

原有xml方式整合配置如下

 注解方式:

@Import可以导入如下三种类


 

第三方框架是指由其他开发者或团队开发的软件模块或库,供开发者在自己的应用程序中使用。这些框架通常提供了一系列已经封装好的功能或工具,可节省开发者的时间和精力。常见的第三方框架包括Web框架、移动应用程序开发框架、图形界面框架、数据库框架、游戏引擎等。开发者可以通过相应的API调用第三方框架提供的功能,从而快速地构建出自己的应用程序。

Spring整合MyBatis

原有xml方式整合配置如下

<!-- 配置SqlSessionFactoryBean,作用将SqlSessionFactory存储到Spring容器  -->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

<!-- 作用:扫描指定的包,产生Mapper对象存储到Spring容器-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--    扫描的包    -->
        <property name="basePackage" value="com.xfy.mapper"></property>
    </bean>
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>
 注解方式:

Spring整合MyBatis的原理,关键在于@MapperScan,@MapperScan不是Spring提供的注解,是MyBatis为了整合Spring,在整合包org.mybatis.annotation中提供的注释

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Import({MapperScannerRegistrar.class})
@Repeatable(MapperScans.class)
public @interface MapperScan {

 

//标注当前类是一个配置类+@Component
@Configuration
@ComponentScan(basePackages ={"org.xfy"} )//basePackages是一个数组  组件扫描
@PropertySource("classpath:jdbc.properties")//用于加载外部properties资源配置,
@Import(otherBean.class)//用于加载其他配置类
@MapperScan("org.xfy.mapper")//接口扫描
public class SpringConfig {
    @Bean
    public DataSource dataSource(
            @Value("${jdbc.driver}") String driver,
            @Value("${jdbc.url}") String url,
            @Value("${jdbc.username}") String username,
            @Value("${jdbc.password}") String password
    ){
        DruidDataSource dataSource=new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return  dataSource;
    }
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
        SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        return sqlSessionFactoryBean;
    }

Spring与MyBatis注解方式整合有个重要的技术点就是@Import,第三方框架与Spring整合xml方式很多是凭借自定义标签完成的,而第三方框架与Spring整合注解方式很多是靠@Import完成的

@Import可以导入如下三种类

  • 普通的配置类

  • 实现ImportSelector接口的类

package org.xfy.imports;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;
import org.xfy.beans.otherBean;
import org.xfy.beans.otherBean2;

import java.util.Map;
import java.util.function.Predicate;

public class MyImportSelect implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        //AnnotationMetadata叫做注释媒体数组,该对象内部封装的是当前使用了@import注解的类上的其他注解的源形象
        Map<String, Object> annotationAttributes = annotationMetadata.getAnnotationAttributes(ComponentScan.class.getName());
        //返回的数组封装的是需要被注册到Spring容器中的Bean的全限定名
        return new String[]{otherBean2.class.getName()};
    }

}

 

实现ImportBeanDefinitionRegister接口的类

package org.xfy.imports;

import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanNameGenerator;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;
import org.xfy.beans.otherBean2;

public class MyImporBeanDefinitionRegisart implements ImportBeanDefinitionRegistrar
{
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry, BeanNameGenerator importBeanNameGenerator) {
        //注册Bean Definition
        BeanDefinition beanDefinition=new RootBeanDefinition();
        beanDefinition.setBeanClassName(otherBean2.class.getName());
        registry.registerBeanDefinition("otherBean2",beanDefinition);
    }

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值