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 {@Beanpublic 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;}@Beanpublic 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 {@Overridepublic 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
{@Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry, BeanNameGenerator importBeanNameGenerator) {//注册Bean DefinitionBeanDefinition beanDefinition=new RootBeanDefinition();beanDefinition.setBeanClassName(otherBean2.class.getName());registry.registerBeanDefinition("otherBean2",beanDefinition);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/168125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用flask返回json格式的数据

Flask Flask是一个使用Python编写的轻量级Web框架&#xff0c;它的设计理念是保持简单、灵活和易扩展。它的核心是Werkzeug和Jinja2&#xff0c;并且它本身只提供了非常基础的Web框架功能&#xff0c;例如路由和请求处理等。 使用Flask可以快速创建一个Web应用程序&#xff0c;…

跳跃游戏Ⅱ[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个长度为n的0索引整数数组nums。初始位置为nums[0]。每个元素nums[i]表示从索引i向前跳转的最大长度。换句话说&#xff0c;如果你在nums[i]处&#xff0c;你可以跳转到任意nums[i j]处: 0 < j < nums[i] i j < n …

【Python 训练营】N_8 打印阿姆斯特朗数

题目 输入一个数&#xff0c;判断是否为阿姆斯特朗数&#xff0c;阿姆斯特朗数指一个n位正整数等于其各位数字的n次方之和。其中n为3时是水仙花数。 分析 利用循环&#xff0c;获取数的长度&#xff0c;根据长度和定义&#xff0c;拆分出来运算 答案 while True:n int(in…

【Python 训练营】N_7 打印水仙花数

题目 打印出1000以内所有的"水仙花数"&#xff0c;所谓"水仙花数"是指一个三位数&#xff0c;其各位数字立方和等于该数本身。例如&#xff1a;153是一个"水仙花数"&#xff0c;因为1531的三次方&#xff0b;5的三次方&#xff0b;3的三次方。 …

数学启发式

学习资料&#xff1a; 优化求解器 | Gurobi 数学启发式算法&#xff1a;参数类型与案例实现 数学启发式算法 | 可行性泵 (Feasibility Pump)算法精讲&#xff1a;一份让您满意的【理论介绍编程实现数值实验】学习笔记(PythonGurobi实现) 大佬到底是大佬&#xff01;这些资料太…

Mac Ubuntu双系统解决WiFi和WiFi 5G网络不可用问题

文章目录 设备信息1. Ubuntu WiFi不可用解决方式查看Mac的网卡型号根据网卡型号搜索获取到的解决方法查看WiFi名字问题参考链接 2. 解决WiFi重启后失效问题打开终端创建.sh脚本文件编辑脚本文件复制粘贴脚本修改脚本权限创建并编辑systemd service文件复制粘贴下文到systemd se…

Typescript怎样对URL参数进行编码?

URL中的参数需要进行编码&#xff08;URL encoding&#xff09;是为了确保传输的参数不包含特殊字符&#xff0c;同时确保数据的可靠性和安全性。 特殊字符如空格、&、?等在URL中有特殊含义&#xff0c;如果直接包含在参数值中&#xff0c;可能会导致解析错误或者安全问题…

只考数据结构,计算机评级C+,成都信息工程大学考情分析

成都信息工程大学(C) 考研难度&#xff08;☆☆&#xff09; 内容&#xff1a;23考情概况&#xff08;拟录取和复试分析&#xff09;、院校概况、24专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文1715字&#xff0c;预计阅读&#xff1a;3分钟 2023考情概况 …

Java实现求最大值

1 问题 接收用户输入的3个整数&#xff0c;如何将最大值作为结果输出。 2 方法 采用“截图文字代码”的方式描述。 引入输入包调用main()函数&#xff0c;提示并接收用户输入的3个整数&#xff0c;并交由变量a b c来保存。对接收的3个数据进行比较&#xff0c;先比较a和b&#…

原型 原型对象 原型链

在面向开发对象开发过程中对每一个实例添加方法&#xff0c;会使每一个对象都存在该添加方法造成空间浪费 通过对原型添加公共的属性或方法&#xff0c;使所有实例对象都可访问 原型为了共享公共的成员 prototype 原型: JS为每个构造函数提供一个属性prototype(原型),它的值…

PostgreSQL数据库初接触

PostgreSQL默认端口为5432 windows下服务名为PostgreSQL-x64-10 10为版本 进程名为pg-ctl.exe 备份数据库命令&#xff1a; pg_dump -h localhost -p 5432 -U postgres -f d:\20231124.dmp tcsl7//tcsl7为数据库名 开始用-d 指定数据库&#xff0c;后来提示没-d参数 还…

在服务器复用他人的anaconda3(免安装)

在服务器复用他人的anaconda3 1. 复制他人的anaconda3文件夹2. 修改配置文件3. 修改环境路径和包路径 1. 复制他人的anaconda3文件夹 cp -r /home/xxx/anaconda3 /home/your_username2. 修改配置文件 vim anaconda3/etc/profile.d/conda.sh # 替换原来的用户名为自己的用户名…

SELinux零知识学习二十八、SELinux策略语言之类型强制(13)

接前一篇文章:SELinux零知识学习二十七、SELinux策略语言之类型强制(12) 二、SELinux策略语言之类型强制 4. 类型规则 类型规则在创建客体或在运行过程中重新标记时指定其默认类型。在策略语言中定义了两个类型规则: type_transtition在域转换过程中标记行为发生时以及创…

jQuery 3.0 新增了哪些特性?(jQuery 3 所引入的那些最重要的变化)

文章目录 前言简介新增特性Use of requestAnimationFrame() for Animationsunwrap() 方法 有变更的特性data() 方法Deferred 对象SVG 文档 已废弃、已移除的方法和属性废弃 bind()、unbind()、delegate() 和 undelegate() 方法移除 load()、unload() 和 error() 方法移除 conte…

计算机应用基础_错题集_OutLook操作题_操作系统应用题_电子表格---网络教育统考工作笔记005

6、(说明:考生单击窗口下方的“打开[Outlook]应用程序”启动Outlook) 按以下要求保存草稿。 收件人:test_xiao_ming@163.com

深眸科技聚焦AI机器视觉检测,驱动3C电子行业集成创新实现新需求

随着消费的升级及国家政策的助推&#xff0c;国内3C电子市场不断扩大&#xff0c;行业实现高速发展。近年来&#xff0c;3C电子产品持续迭代&#xff0c;生产工艺也逐渐复杂化&#xff0c;相关生产线定位组装、零部件检测、整机产品检测等环节&#xff0c;亟需使用具备较强适应…

C语言-字符串逆序

输入一个字符串&#xff0c;对该字符串进行逆序&#xff0c;输出逆序后的字符串。 输入格式&#xff1a; 输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。 输出格式&#xff1a; 在一行中输出逆序后的字符串。 输入样例&#xff1a; Hello World…

云原生系列Go语言篇-编写测试Part 2

基准测试 确定代码是快或慢非常复杂。我们不用自己计算&#xff0c;应使用Go测试框架内置的基准测试。下面来看​​第15章的GitHub代码库​​sample_code/bench目录下的函数&#xff1a; func FileLen(f string, bufsize int) (int, error) {file, err : os.Open(f)if err ! …

【XSLVGL2.0】如何设置壁纸

XSLVGL2.0 开发手册 XSLVGL2.0 Brief 1、概述2、设置方法 1、概述 设置壁纸使用的是LVGL默认的方式。一般而言&#xff0c;若非必要&#xff0c;建议不要去设置此功能&#xff0c;此功能对性能影响颇大。 2、设置方法 在main.c的 static int InitLvgl(void *cookie) 函数中…

举个栗子!Quick BI 技巧(4):创建面积图

面积图又叫区域图&#xff0c;是在折线图的基础之上形成的, 它将折线图中折线与自变量坐标轴之间的区域使用颜色或者纹理填充&#xff0c;这样一个填充区域我们叫做面积&#xff0c;颜色的填充也可以更好的突出趋势信息。 有数据粉好奇如何使用 Quick BI 来制作面积图&#xf…