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

目录

一:原有xml方式

二:注解方式


一:原有xml方式

           第三方框架整合, 依然使用MyBatis作为整合对象, 之前我们已经使用xml方式整合了MyBatis, 现在使用注解方式 无非就是将xml标签替换为注解, 将xml配置文件替换为配置类而已, 原有xml方式整合配置如下:

<!--配置数据源--->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
      <property name="url"  value="jdbc:mysql://localhost:3306/mybatis"></property>
      <property name="username"  value="root"></property>
       <property name="password"  value="1234"></property>
</bean>
<!--配置sqlSessionFactoryBean-->
<bean class="org.mybatis.spring.sqlsessionFactoryBean">
      <property name="dataSource" ref="dataSource"></property>
</bean>
<!--配置Mapper包扫描-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
       <property name="basePackage" value="com.tangyuan.dao"></property>
</bean>

 

@Configuration  //标注当前类是一个配置类(替代配置文件)+@Component
//<context:component-scan base-package="com.itheima"/>
@ComponentScan("com.tangyuan")
//<context:property-placeholder location="classpath:jdbc.properties"/>
@PropertySource("classpath:jdbc.properties")
//<import resource=""></import>
@Import(OtherBean.class)
//3/Mapper的接口扫描
@MapperScan("com.tangyuan.mapper")
public class SpringConfig {
     <!--1.配置数据源--->
    @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;
    }
         <!--2.配置sqlSessionFactoryBean-->
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        return sqlSessionFactoryBean;
    }

}
-------jdbc.properties代码----------
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=1234

二:注解方式

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

  • 普通的配置类

  • 实现ImportSelector接口的类

  • 实现ImportBeanDefinitionRegistrar接口的类

 


<!---实现ImportSelector接口的类--->
@Import({MyImportSelector.class})

<!--实现ImportBeanDefinitionRegistrar接口的类-->
//@Import(MyImportBeanDefinitionRegistrar.class)
public class SpringConfig {


}
MyImportSelector.class

public class MyImportSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        //参数annotationMetadata叫做注解媒体数组,该对象内部封装是当前使用了@Import注解的类上的其他注解的元信息
        Map<String, Object> annotationAttributes = annotationMetadata.getAnnotationAttributes(ComponentScan.class.getName());
        String[] basePackages = (String[]) annotationAttributes.get("basePackages");
        System.out.println(basePackages[0]);
        //返回的数组封装是需要被注册到Spring容器中的Bean的全限定名
        return new String[]{OtherBean2.class.getName()};
    }
}

public class OtherBean2 {
}
MyImportBeanDefinitionRegistrar.class

public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {

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

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值