MyBatis 全局配置文件詳解
1 MyBatis 全局配置文件
MyBatais 全局配置文件所有配置項(xiàng)如下所示,配置項(xiàng)只能按照如下順序進(jìn)行設(shè)置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--配置--> <properties/> <!--屬性--> <settings/> <!--全局配置參數(shù)--> <typeAliases/> <!--類型別名--> <typeHandlers/> <!--類型處理器--> <objectFactory/><!--對(duì)象工廠--> <plugins/><!--創(chuàng)建--> <environments default=""><!--環(huán)境配置--> <environment id=""><!--環(huán)境變量--> <transactionManager type=""/><!--事務(wù)管理器--> <dataSource type=""/><!--數(shù)據(jù)源--> </environment> </environments> <databaseIdProvider type=""/><!--數(shù)據(jù)庫(kù)廠商標(biāo)識(shí)--> <mappers/><!--映射器--> </configuration>
2 properties 元素
mysql.properties 配置文件
url=jdbc:mysql://localhost:3306/study?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC name=root password=123456 driver=com.mysql.cj.jdbc.Driver
通過(guò) properties 元素導(dǎo)入 mysql.properties 配置文件,會(huì)在當(dāng)前配置文件所在目錄下查找 mysql.properties 配置文件
<properties resource="mysql.properties" />
此外,也可以用 properties 元素的 url 屬性來(lái)指定屬性文件的 URL
<!-- 指定一個(gè)網(wǎng)絡(luò)上的屬性文件 --> <properties url="http://example.com/jdbc.properties" /> <!-- 指定一個(gè)位于本地文件系統(tǒng)中的屬性文件 --> <properties url="file:///path/to/config.properties" />
如果屬性在不只一個(gè)地方進(jìn)行了配置,那么 MyBatis 將按照如下順序來(lái)加載:
- 在 properties 元素體內(nèi)指定的屬性首先被讀取
<properties> <!--property子元素定義--> <property name="database.driver" value="com.mysql.cj.jdbc.Driver"/> <property name="database.url" value="jdbc:mysql://localhost:3306/study?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"/> <property name="database.username" value="root"/> <property name="database.password" value="123456"/> </properties>
- 然后根據(jù) properties 元素中的 resource 屬性讀取類路徑下屬性文件或根據(jù) url 屬性指定的路徑讀取屬性文件,并覆蓋已讀取的同名屬性
- 最后讀取作為方法參數(shù)傳遞的屬性,并覆蓋已讀取的同名屬性
// 加載數(shù)據(jù)庫(kù)配置文件 is = Resources.getResourceAsStream("msyql.properties"); Properties properties = new Properties(); properties.load(is); // 獲取加密信息 String username= properties.getProperty("database.username"); String password= properties.getProperty("database.password"); // 解密用戶名和密碼,并重置屬性 properties.setProperty("database.username", CyperTool.decodeByBase64(username)); properties.setProperty("database.password", CyperTool.decodeByBase64(password));
3 setting 設(shè)置
setting 設(shè)置是 MyBatis 中極為重要的調(diào)整設(shè)置,它們會(huì)改變 MyBatis 的運(yùn)行時(shí)行為。但是大部分情況下使用默認(rèn)值便可以運(yùn)行,所以在大部分情況下不需要大量配置,只需要修改一些常用的規(guī)則即可。常用規(guī)則有自動(dòng)映射、駝峰命名映射、級(jí)聯(lián)規(guī)則、是否啟動(dòng)緩存、執(zhí)行器類型等。
<settings> <!--緩存配置的全局開(kāi)關(guān):如果這里設(shè)置成false,那么即便在映射器中配置開(kāi)啟也無(wú)濟(jì)于事 --> <setting name="cacheEnabled" value="true" /> <!--延時(shí)加載的全局開(kāi)關(guān) --> <setting name="lazyLoadingEnabled" value="false" /> </settings>
屬性名 | 含義 | 簡(jiǎn)介 | 有效值 | 默認(rèn)值 |
---|---|---|---|---|
cacheEnabled | 是否使用緩存 | 是整個(gè)工程中所有映射器配置緩存的開(kāi)關(guān),即是一個(gè)全局緩存開(kāi)關(guān) | true | false | true |
lazyLoadingEnabled | 是否開(kāi)啟延遲加載 | 控制全局是否使用延遲加載。當(dāng)有特殊關(guān)聯(lián)關(guān)系需要單獨(dú)配置時(shí),可以使用 fetchType 屬性來(lái)覆蓋此配置 | true | false | false |
aggressiveLazyLoading | 是否按需加載屬性 | 開(kāi)啟時(shí),不論調(diào)用什么方法加載某個(gè)對(duì)象,都會(huì)加載該對(duì)象的所有屬性,關(guān)閉后只會(huì)按需加載 | true | false | false |
multipleResultSetsEnabled | 是否允許單一語(yǔ)句返回多結(jié)果集 | 即 Mapper 配置中一個(gè)單一的 sql 配置是否能夠返回多個(gè)結(jié)果集 | true | false | true |
useColumnLabel | 使用列標(biāo)簽代替列名 | 設(shè)置是否使用列標(biāo)簽代替列名 | true | false | true |
useGenerateKeys | 是否支持 JDBC 自動(dòng)生成主鍵 | 設(shè)置之后,將會(huì)強(qiáng)制使用自動(dòng)生成主鍵的策略 | true | false | false |
autoMappingBehavior | 指定 MyBatis 自動(dòng)映射字段或?qū)傩缘姆绞?/td> | 有三種方式,NONE 時(shí)將取消自動(dòng)映射;PARTIAL 時(shí)只會(huì)自動(dòng)映射沒(méi)有定義結(jié)果集的結(jié)果映射;FULL 時(shí)會(huì)映射任意復(fù)雜的結(jié)果集 | NONE, PARTIAL, FULL | PARTIAL |
autoMappingUnknownColumnBehavior | 設(shè)置當(dāng)自動(dòng)映射時(shí)發(fā)現(xiàn)未知列的動(dòng)作 | 有三種動(dòng)作,NONE 時(shí)不做任何操作;WARNING 時(shí)會(huì)輸出提醒日志;FALLING 時(shí)會(huì)拋出 SqlSessionException 異常表示映射失敗 | NONE, WARNING, FALLING | NONE |
defaultExecutorType | 設(shè)置默認(rèn)的執(zhí)行器 | 有三種執(zhí)行器,SIMPLE 為普通執(zhí)行器;REUSE 執(zhí)行器會(huì)重用處理語(yǔ)句;BATCH 執(zhí)行器將重用語(yǔ)句并執(zhí)行批量更新 | SIMPLE, REUSE, BATCH | SIMPLE |
defaultStatementTimeout | 設(shè)置超時(shí)時(shí)間 | 該超時(shí)時(shí)間即數(shù)據(jù)驅(qū)動(dòng)連接數(shù)據(jù)庫(kù)時(shí),等待數(shù)據(jù)庫(kù)回應(yīng)的最大秒數(shù) | 任意正整數(shù) | 無(wú) |
defaultFetchSize | 設(shè)置驅(qū)動(dòng)的結(jié)果集 | 為了防止從數(shù)據(jù)庫(kù)查詢出來(lái)的結(jié)果過(guò)多,而導(dǎo)致內(nèi)存溢出,可以通過(guò)設(shè)置 fetchSize 參數(shù)來(lái)控制結(jié)果集的數(shù)量 | 任意正整數(shù) | 無(wú) |
safeRowBoundsEnabled | 允許在嵌套語(yǔ)句中使用分頁(yè),RowBound,即行內(nèi)嵌套語(yǔ)句 | 如果允許在 sql 的行內(nèi)嵌套語(yǔ)句中使用分頁(yè),就設(shè)置該值為 false | true | false | false |
safeResultHandlerEnabled | 允許在嵌套語(yǔ)句中使用分頁(yè),ResultHandler,即結(jié)果及處理 | 如果允許對(duì) sql 的結(jié)果集使用分頁(yè),就設(shè)置該值為 false | true | false | true |
mapUnderscoreToCamelCase | 是否開(kāi)啟駝峰命名規(guī)則映射 | 表名數(shù)據(jù)庫(kù)中的字段名稱與工程中 Java 實(shí)體內(nèi)的映射是否采用駝峰命名規(guī)則校驗(yàn) | true | false | false |
localCacheScope | MyBatis 利用本地緩存機(jī)制防止循環(huán)引用和加速重復(fù)嵌套查詢 | 默認(rèn)值為 SESSION,這種情況下會(huì)緩存一個(gè)會(huì)話中執(zhí)行的所有查詢。若設(shè)置為 STATEMENT,一級(jí)緩存僅對(duì)當(dāng)前執(zhí)行的語(yǔ)句有效。這意味著每次語(yǔ)句執(zhí)行完畢后,緩存就會(huì)被清空 | SESSION | STATEMENT | SESSION |
jdbcTypeForNull | JDBC 類型的默認(rèn)設(shè)置 | 當(dāng)沒(méi)有參數(shù)提供特定的 JDBC 類型時(shí),為空值指定 JDBC 類型。某些驅(qū)動(dòng)需要指定列的 JDBC 類型,多數(shù)情況直接用一般類型即可,比如 NULL、VARCHAR 或 OTHER | 常用 NUL、VARCHAR、OTHER | OTHER |
lazyLoadTriggeerMethods | 指定哪個(gè)對(duì)象的方法觸發(fā)一次延遲加載 | 配置需要觸發(fā)延遲加載的方法的名字,該方法就會(huì)觸發(fā)一次延遲加載 | 一個(gè)逗號(hào)分隔的方法名稱列表 | equals, clone, hashCode, toString |
defaultScriptingLanguage | 動(dòng)態(tài) sql 默認(rèn)語(yǔ)言 | 指定動(dòng)態(tài) sql 生成的默認(rèn)語(yǔ)言 | 一個(gè)類型的的別名或者一個(gè)類的全類名 | org.apache.ibatis. scripting.xmltargs. XMLLanguageDriver |
callSettersOnNulls | 是否在空值情況下調(diào)用 Set 方法 | 指定當(dāng)結(jié)果集中的值為 null 時(shí)是否調(diào)用映射對(duì)像的 setter (map 對(duì)象為 put)方法,這對(duì)于有 Map.keySet() 依賴或 null 值初始化是有用的。注意基本類型不能設(shè)置為 null | true | false | false |
returnInstanceForEmptyRow | 返回空實(shí)體集對(duì)象 | 當(dāng)返回行的所有列都是空時(shí),MyBatis 默認(rèn)返回 null。當(dāng)開(kāi)啟這個(gè)設(shè)置時(shí),MyBatis 會(huì)返回一個(gè)空實(shí)例。此外,從 MyBatis 3.4.2 開(kāi)始,它也適用于嵌套的結(jié)果集 | true | false | false |
logImpl | 日志實(shí)現(xiàn) | 指定 MyBatis 所用日志的具體實(shí)現(xiàn),為指定時(shí)將自動(dòng)查找 | SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING | 無(wú) |
proxyFactory | 代理工廠 | 指定 MyBatis 創(chuàng)建具有延遲加載能力的對(duì)象所用到的代理工具 | CGLIB | JAVASSIST | JAVASSIST |
vfsImpl | vfs 實(shí)現(xiàn) | 指定 vfs 的實(shí)現(xiàn) | 自定義 VFS 實(shí)現(xiàn)類的全類名,以逗號(hào)分割 | 無(wú) |
useActualParamName | 使用方法簽名 | 允許使用方法簽名中的名稱作為語(yǔ)句參數(shù)名稱。要使用該特性,工程必須采用 Java8 編譯,并且加上 -parameters 選項(xiàng)(從 MyBatis 3.4.1 版本開(kāi)始) | true | false | false |
configurationFactory | 配置工廠 | 指定提供配置實(shí)例的類。返回的配置實(shí)例用于加載反序列化的懶加載參數(shù)。這個(gè)類必須有一個(gè)簽名的靜態(tài)配置 getconfiguration() 方法(從 MyBatis 3.2.3 版本開(kāi)始) | 一個(gè)類型別名或者一個(gè)類的全類名 | 無(wú) |
4 typeAlianses 別名處理器
typeAliases 可以給類設(shè)置別名,這樣當(dāng)我們需要使用類時(shí),可以不用每次都寫那么復(fù)雜的全類名 (com.pojo.User)
<!--設(shè)置別名--> <typeAliases> <!--對(duì)類單獨(dú)進(jìn)行別名設(shè)置 --> <typeAlias alias="user" type="com.pojo.User"></typeAlias> <typeAlias alias="student" type="com.pojo.Student"></typeAlias> </typeAliases>
批量給類設(shè)置別名,為包中的每一個(gè)類設(shè)置別名,設(shè)置規(guī)則是:獲取類名稱,將其第一個(gè)字母變?yōu)樾?/strong>
<!--設(shè)置別名--> <typeAliases> <!-- 對(duì)包進(jìn)行掃描,可以批量進(jìn)行別名設(shè)置,設(shè)置規(guī)則是:獲取類名稱,將其第一個(gè)字母變?yōu)樾?--> <package name="com.pojo1"/> <package name="com.pojo2"/> <package name="com.pojo3"/> </typeAliases>
通過(guò) @Alias 注解設(shè)置別名
@Alias("user") public class User { 省略...... }
需要注意的是,MyBatis 已經(jīng)為某些類定義了別名,此外,別名對(duì)大小寫不敏感。對(duì)此,為某些類定義別名時(shí),不能占用已有別名
5 typeHandler 類型處理器
在 typeHandler 類型處理器中,包含 javaType 和 jdbcType 兩種類型,其中 javaType 用來(lái)定義 Java 類型,jdbcType 用來(lái)定義數(shù)據(jù)庫(kù)類型,而 typeHandler 的作用就是對(duì) javaType 和 jdbcType 兩種類型進(jìn)行轉(zhuǎn)換,如下圖所示:
下圖是 MyBatis 已經(jīng)定義好的部分類型處理器,當(dāng)然,我們也可以自定義類型處理器,此處不做介紹
6 objectFacotry 對(duì)象工廠(了解)
objectFacotry 表示為對(duì)象工廠。對(duì)象工廠我們只需了解即可,因?yàn)榈綍r(shí)候與 Spring 整合后,都會(huì)由 Spring 來(lái)管理。我們知道,在 JDBC 中查詢的結(jié)果會(huì)保存在一個(gè)結(jié)果集中,而 MyBatis 也是這樣,它會(huì)使用其定義的對(duì)象工廠 DefaultObjectFactory 來(lái)將查詢的結(jié)果保存在結(jié)果集中。
7 plugins 插件(了解)
plugins 插件是 MyBatis 提供的一個(gè)非常強(qiáng)大的機(jī)制。通過(guò)插件,我們可以在不修改 MyBatis 核心代碼的情況下,對(duì)其核心行為進(jìn)行修改。利用動(dòng)態(tài)代理機(jī)制,插件能夠介入到四大對(duì)象(Mapper Interface、Mapped Statement、Parameter Map 和 ResultSet Handler)的任何一個(gè)方法的執(zhí)行過(guò)程中。
8 environments 運(yùn)行環(huán)境
environments 標(biāo)簽用于指定當(dāng)前運(yùn)行環(huán)境,在 MyBatis 中可以配置多種環(huán)境,比如開(kāi)發(fā)、測(cè)試和生產(chǎn)環(huán)境。每種環(huán)境使用一個(gè) environment 標(biāo)簽進(jìn)行配置并指定唯一標(biāo)識(shí)符,可以通過(guò) environments 標(biāo)簽中的 default 屬性指定一個(gè)環(huán)境的標(biāo)識(shí)符來(lái)快速的切換環(huán)境,environment 標(biāo)簽里面分為兩個(gè)可配置的標(biāo)簽:事務(wù)管理 (transactionManager)、數(shù)據(jù)源 (DataSource)。而在我們的日常開(kāi)發(fā)中,這些都會(huì)交給 Spring 來(lái)管理,不用在全局配置中編寫。
transactionManager
transactionManager 配置事務(wù)管理器類型,type = JDBC | MANAGED | 自定義(type=全類名或別名)
- JDBC 使用 JdbcTransactionFactory 工廠生成的 JdbcTransaction 對(duì)象實(shí)現(xiàn),以 JDBC 的方式進(jìn)行數(shù)據(jù)庫(kù)的提交、回滾等操作,它依賴于從數(shù)據(jù)源得到的連接來(lái)管理事務(wù)范圍
- MANAGED 使用 ManagedTransactionFactory 工廠生成的 ManagedTransaction 對(duì)象實(shí)現(xiàn),它的提交和回滾不需要任何操作,而是把事務(wù)交給容器進(jìn)行處理,默認(rèn)情況下會(huì)關(guān)閉連接,如果不希望默認(rèn)關(guān)閉,只要將其中的 closeConnection 屬性設(shè)置為 false 即可
- 自定義的事務(wù)管理類型需要實(shí)現(xiàn) TransactionFactory 接口
DataSource
在 MyBatis 中,數(shù)據(jù)庫(kù)是通過(guò) PooledDataSourceFactory、UnpooledDataSourceFactory 和 JndiDataSourceFactory 三個(gè)工廠類來(lái)提供,前兩者分別產(chǎn)生 PooledDataSource 和 UnpooledDataSource 類對(duì)象,第三個(gè)則會(huì)根據(jù) JNDI 的信息獲得外部容器實(shí)現(xiàn)的數(shù)據(jù)庫(kù)連接對(duì)象,總之,它們最后都會(huì)生成一個(gè)實(shí)現(xiàn)了 DataSource 接口的數(shù)據(jù)庫(kù)連接對(duì)象。
type = UNPOOLED | POOLED | JNDI | 自定義
UNPOOLED
UNPOOLED 采用非數(shù)據(jù)庫(kù)池的管理方式,每次請(qǐng)求都會(huì)新建一個(gè)連接,所以性能不是很高,使用這種數(shù)據(jù)源的時(shí)候,UNPOOLED 類型的數(shù)據(jù)源可以配置以下屬性:
- driver:數(shù)據(jù)庫(kù)驅(qū)動(dòng)名
- url:數(shù)據(jù)庫(kù)連接 URL
- username:用戶名
- password:密碼
- defaultTransactionIsolationLevel:默認(rèn)的事務(wù)隔離級(jí)別,如果要傳遞屬性給驅(qū)動(dòng),則屬性的前綴為 driver
POOLED
POOLED 采用連接池的概念將數(shù)據(jù)庫(kù)鏈接對(duì)象 Connection 組織起來(lái),可以在初始化時(shí)創(chuàng)建多個(gè)連接,使用時(shí)直接從連接池獲取,避免了重復(fù)創(chuàng)建連接所需的初始化和認(rèn)證時(shí)間,從而提升了效率,所以這種方式比較適合對(duì)性能要求高的應(yīng)用中。除了 UNPOOLED 中的配置屬性之外,還有以下幾個(gè)修改連接池的配置:
poolMaximumActiveConnections:用于設(shè)置連接池中允許的最大活躍連接數(shù)。超過(guò)這個(gè)數(shù)量的連接將會(huì)被阻塞,直到有連接被釋放為止,默認(rèn)值為 10
poolMaxmumIdleConnections:用于設(shè)置連接池中允許的最大空閑連接數(shù)。當(dāng)連接池中的連接數(shù)量超過(guò)這個(gè)值時(shí),多余的連接將會(huì)被釋放,默認(rèn)值為 5
poolMaxmumCheckoutTime:用于設(shè)置連接在連接池中的最大使用時(shí)間。超過(guò)這個(gè)時(shí)間的連接將會(huì)被強(qiáng)制回收,默認(rèn)值為 20000 毫秒(即 20 秒)
poolTimeToWait:用于設(shè)置從連接池中獲取連接時(shí)的最大等待時(shí)間。如果在這個(gè)時(shí)間內(nèi)無(wú)法獲取到連接,將會(huì)拋出超時(shí)異常,默認(rèn)值為 20000 毫秒(即 20 秒)
JNDI
數(shù)據(jù)源 JNDI 的實(shí)現(xiàn)是為了能在如 EJB 或應(yīng)用服務(wù)器這類容器中使用,容器可以集中或在外部配置數(shù)據(jù)源,然后放置一個(gè) JNDI 上下文的引用。這種數(shù)據(jù)源只需配置兩個(gè)屬性:
- initial_context:用來(lái)在 InitialContext 中尋找上下文??蛇x,如果忽略,data_source 屬性將會(huì)直接從 InitialContext 中尋找
- data_source:引用數(shù)據(jù)源實(shí)例位置上下文的路徑。當(dāng)提供 initial_context 配置時(shí),data_source 會(huì)在其返回的上下文進(jìn)行查找,否則直接從 InitialContext 中查找
9 databaseIdProvider 數(shù)據(jù)庫(kù)廠商(了解)
databaseIdProvider 元素主要是為了支持不同廠商的數(shù)據(jù)庫(kù),這個(gè)元素不常用。
<!--數(shù)據(jù)庫(kù)廠商標(biāo)示 --> <databaseIdProvider type="DB_VENDOR"> <property name="Oracle" value="oracle"/> <property name="MySQL" value="mysql"/> <property name="DB2" value="d2"/> </databaseIdProvider>
以下是 databaseIdProvider 中的屬性介紹:
- Type:DB_VENDOR,使用 MyBatis 提供的 VendorDatabaseIdProvider 解析數(shù)據(jù)庫(kù)廠商標(biāo)識(shí)。也可以實(shí)現(xiàn) DatabaseIdProvider 接口來(lái)自定義
- Property-name:數(shù)據(jù)庫(kù)廠商標(biāo)識(shí)
- Property-value:為數(shù)據(jù)庫(kù)廠商標(biāo)識(shí)起一個(gè)別名,方便 SQL 語(yǔ)句使用 databaseId 屬性引用
設(shè)置了以上配置,我們就可以在自己的 sql 語(yǔ)句中使用屬性 databaseId 來(lái)標(biāo)示數(shù)據(jù)庫(kù)類型
<!-- 查詢所有用戶 --> <select id="selectAllUser" resultType="com.entity.User" databaseId="oracle"> select * from t_user </select>
10 mapper 加載 SQL 映射文件
mapper 用來(lái)加載配置的 SQL 映射文件,它有以下四種加載方式:
- 用文件路徑引入
- 使用 URL 方式引入
- 用類注冊(cè)引入
- 用包名引入(推薦)
<mappers> <!-- 用文件路徑引入,這種方式是相對(duì)路徑,相對(duì)于項(xiàng)目目錄下 --> <mapper resource="com/mapper/UserMapper.xml" /> <!-- 使用 URL 方式引入,這種方式是絕對(duì)路徑, 就是從我們的磁盤讀取映射文件,一般不會(huì)使用這種方式 --> <mapper url="D:/xxx/com/mapper/UserMapper.xml" /> <!-- 用類注冊(cè)引入,若使用這種方式,Mapper接口的名稱必須與映射文件的名稱相同, 并且要在同一個(gè)包名下,否則會(huì)找不到。如:UserMapper.java(接口)—UserMapper.xml(映射文件) --> <mapper class="com.mapper.UserMapper" /> <!-- 用包名引入(推薦),這種方式的要求同樣是Mapper接口和Mapper的映射文件的名稱要相同, 并且要放在相同的包名下,否則會(huì)導(dǎo)致找不到 --> <package name="com.mapper"/> </mappers>
11 參考文檔
尚硅谷文檔
Mybatis3詳解(三)----Mybatis全局配置文件詳解
到此這篇關(guān)于MyBatis 全局配置文件詳解的文章就介紹到這了,更多相關(guān)MyBatis 全局配置文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java編程實(shí)現(xiàn)遍歷兩個(gè)MAC地址之間所有MAC的方法
這篇文章主要介紹了Java編程實(shí)現(xiàn)遍歷兩個(gè)MAC地址之間所有MAC的方法,涉及Java針對(duì)MAC的遍歷獲取與字符串轉(zhuǎn)換相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11SpringBoot項(xiàng)目打成war和jar的區(qū)別說(shuō)明
這篇文章主要介紹了SpringBoot項(xiàng)目打成war和jar的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06Spring中AOP概念與兩種動(dòng)態(tài)代理模式原理詳解
AOP是面向切面編程的技術(shù),AOP基于IoC基礎(chǔ),是對(duì)OOP的有益補(bǔ)充,流行的AOP框架有Sping AOP、AspectJ,這篇文章主要給大家介紹了關(guān)于Spring中AOP概念與兩種動(dòng)態(tài)代理模式原理的相關(guān)資料,需要的朋友可以參考下2021-10-10Java實(shí)現(xiàn)的圖片高質(zhì)量縮放類定義與用法示例
這篇文章主要介紹了Java實(shí)現(xiàn)的圖片高質(zhì)量縮放類定義與用法,涉及java針對(duì)圖片的運(yùn)算與轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下2017-11-11Maven統(tǒng)一版本管理的實(shí)現(xiàn)
在使用Maven多模塊結(jié)構(gòu)工程時(shí),配置版本是一個(gè)比較頭疼的事,本文主要介紹了Maven統(tǒng)一版本管理的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03