講解ssm框架整合(最通俗易懂)
環(huán)境
MySQL 8.0.16
1 Mybatis
1.1 數(shù)據(jù)庫(kù)配置文件
jdbc.driver=com.mysql.cj.jdbc.Driver # 如果使用mysql 6+,增加一個(gè)時(shí)區(qū)的配置 jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false jdbc.username=root jdbc.password=123456
com.mysql.jdbc.Driver 與 com.mysql.cj.jdbc.Driver ?
- com.mysql.jdbc.Driver 是 mysql-connector-java 5 中的
- com.mysql.cj.jdbc.Driver 是 mysql-connector-java 6 中的
JDBC 連接 mysql 5:
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false
JDBC 連接 mysql 6:
url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&?useUnicode=true&characterEncoding=utf8&useSSL=false
1.2 配置 Mybatis
<?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> <!--配置數(shù)據(jù)源,交給 spring 去做--> <typeAliases> <package name="com.fyy.pojo"/> </typeAliases> <mappers> <mapper class="com.fyy.dao.BookMapper"/> </mappers> </configuration>
typeAiases 標(biāo)簽作用?
其中,<typeAiases>標(biāo)簽的作用只是為 Java 類型指定一個(gè)短的名字,它只和xml 配置有關(guān),存在的意義僅在于用來(lái)減少類完全限定名的冗余。
指定一個(gè)包名,Mybatis 會(huì)在此包名下搜索需要的 Java Bean,每一個(gè)在此包下的 Java Bean,在沒(méi)有注解的情況下,會(huì)使用 Bean 的首字母小寫的非限定類名作為它的別名,比如:com.fyy.pojo.User 的別名為:user ,若有注解,則別名為其注解值。如下例子:
@Alias("hello") public class Hello(){}
mappers標(biāo)簽作用?
Mybatis 是基于 Sql 映射配置的框架,Sql 語(yǔ)句在Mapper 配置文件中,當(dāng)構(gòu)建 SqlSession 類之后,就需要去讀取 Mapper 配置文件中的 sql 配置。
mappers : 映射器,以最佳的方式告訴 Mybatis 去哪里找映射文件,就是用來(lái)配置需要加載的 sql 映射配置文件路徑的。
mappers 下的每一個(gè) mapper 都是一個(gè)mapper,配置的都是一個(gè)獨(dú)立的映射配置文件的路徑,配置方式有以下幾種。
1、接口所在包
<mappers> <!-- mapper接口所在的包名 --> <package name="com.fyy.mapper"/> </mappers> # package標(biāo)簽,通過(guò) name 屬性指定 mapper 接口所在的包名,此時(shí)對(duì)應(yīng)的映射文件必須 與接口位于同一路徑下,并且名稱相同。
2、相對(duì)路徑配置
<mappers> <mapper resource="com/fyy/mapper/FlowerMapper.xml"/> </mappers> # mapper標(biāo)簽,通過(guò) resource 屬性引入 classpath 路徑的相對(duì)資源
3、類注冊(cè)引入
<mappers> <mapper class="com.fyy.mapper.FlowerMapper"/> </mappers> # mapper 標(biāo)簽,通過(guò) class 屬性指定 mapper 接口名稱,此時(shí)對(duì)應(yīng)的映射文件必須與接口位于同一路徑 下,并且名稱相同
4、使用 url 絕對(duì)路徑方式引入(不推薦)
<mappers> <mapper url="file:///var/mappers/UserMapper.xml"/> </mappers> # mapper 標(biāo)簽,通過(guò) url 引入網(wǎng)絡(luò)資源或者本地磁盤資源
總結(jié)
只有配置了 mappers 信息,Mybatis 才知道去哪里加載 Mapper 配置文件,開(kāi)發(fā)中,根據(jù)項(xiàng)目中 Mapper 的配置偏好,選擇整合配置文件的配置方式。
2 Spring 整合 Mybatis
2.1 Spring 整合 dao 層
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!-- 配置整合Mybatis--> <!--1、關(guān)聯(lián)數(shù)據(jù)庫(kù)配置文件--> <context:property-placeholder location="classpath:database.properties"/> <!--2、連接池--> <!--數(shù)據(jù)庫(kù)連接池 dbcp 半自動(dòng)化操作 不能自動(dòng)連接 c3p0 自動(dòng)化操作(自動(dòng)的加載配置文件 并且設(shè)置到對(duì)象里面)--> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 配置連接池屬性 --> <property name="driverClass" value="${jdbc.driver}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <!-- c3p0連接池的私有屬性 --> <property name="maxPoolSize" value="30"/> <property name="minPoolSize" value="10"/> <!-- 關(guān)閉連接后不自動(dòng)commit --> <property name="autoCommitOnClose" value="false"/> <!-- 獲取連接超時(shí)時(shí)間 --> <property name="checkoutTimeout" value="10000"/> <!-- 當(dāng)獲取連接失敗重試次數(shù) --> <property name="acquireRetryAttempts" value="2"/> </bean> <!-- 3.配置SqlSessionFactory對(duì)象 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 注入數(shù)據(jù)庫(kù)連接池 --> <property name="dataSource" ref="dataSource"/> <!-- 配置MyBaties全局配置文件:mybatis-config.xml --> <property name="configLocation" value="classpath:mybatis-config.xml"/> </bean> <!-- 4.配置掃描Dao接口包,動(dòng)態(tài)實(shí)現(xiàn)Dao接口注入到spring容器中 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 注入sqlSessionFactory --> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> <!-- 給出需要掃描Dao接口包 --> <property name="basePackage" value="com.fyy.dao"/> </bean> </beans>
2.1.1 context:property-placeholder標(biāo)簽作用?
在開(kāi)發(fā)中有些參數(shù)是常量,比如:連接數(shù)據(jù)庫(kù)的 url,password,username 等信息,不需要常變化,但在不同階段又需要變化,有沒(méi)有有一種方案方便我們?cè)谝粋€(gè)階段內(nèi)不需要頻繁寫一個(gè)參數(shù)的值,但在不同階段間又可以方便的切換參數(shù)的配置信息。
解決方案:Spring 3 中提供了一種簡(jiǎn)便的方式就是 content:property-placeholder元素,即可解決上述問(wèn)題。
在 content:property-placeholder 標(biāo)簽中 利用屬性 localtion ,值為文件路徑,可以使用 classpath: 指定文件名即可。這里我們關(guān)聯(lián)上數(shù)據(jù)庫(kù)配置信息。
Spring 容器中僅允許最多定義一個(gè) context:property-placeholder ,其余的會(huì)被忽略。
2.1.2 數(shù)據(jù)庫(kù)連接池
每次創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)連接都是一次極大的資源消費(fèi),所以連接復(fù)用,通過(guò)建立一個(gè)數(shù)據(jù)庫(kù)連接池以及一套連接使用管理策略,可以使一個(gè)數(shù)據(jù)庫(kù)連接可以得到高效、安全的復(fù)用,能避免了數(shù)據(jù)庫(kù)連接池頻繁建立、關(guān)閉的開(kāi)銷。
連接池的本質(zhì):介于 Java 和 JDBC 之間的 Java jar 包!
第1步中,我們關(guān)聯(lián)了數(shù)據(jù)庫(kù)配置信息,利用 bean 標(biāo)簽可獲取其中的配置信息。
可根據(jù)項(xiàng)目實(shí)際開(kāi)發(fā)中,配置連接池的最大數(shù)量、最小數(shù)量、關(guān)閉連接后是否自動(dòng) commit、獲取連接超時(shí)時(shí)間、獲取連接失敗重試次數(shù)等,很多屬性,在這不一 一贅述了。
2.1.3 配置 SqlSessionFactory 對(duì)象
SqlSessionFacoty 的作用就是創(chuàng)建 SqlSession,SqlSession 就是一個(gè)會(huì)話,相當(dāng)于 JDBC 中的 Connection 對(duì)象,每次應(yīng)用訪問(wèn)數(shù)據(jù)庫(kù),就要通過(guò) SqlSessionFactory 創(chuàng)建 SqlSession ,所以 SqlSessionFacoty 應(yīng)該在 Mybatis 整個(gè)生命周期中,每一個(gè)數(shù)據(jù)庫(kù)只應(yīng)該對(duì)應(yīng)一個(gè) SqlSessionFacoty.
SqlSessionFacoty 在整個(gè) Mybatis 運(yùn)行流程中的作用如下圖。
配置 SqlSessionFactory 對(duì)象時(shí),將數(shù)據(jù)庫(kù)連接池注入到其中,再配置 mybatis 全局配置文件 。
我的理解是:在 SqlSessionFactory 創(chuàng)建 SqlSession 連接數(shù)據(jù)庫(kù)時(shí),需要知道數(shù)據(jù)庫(kù)連接池的信息,以及數(shù)據(jù)源。
2.1.4 配置掃描dao接口包
MapperScannerConfigurer 自動(dòng)掃描將 Mapper 接口生成代理注入到 Spring容器,Mybatis 在與 Spring 整合的時(shí)候配置 MapperFactoryBean 來(lái)生成 Mapper 接口的代理。 basePackage 屬性是讓你為映射器接口文件設(shè)置基本的包路徑,你可以使用分號(hào)或者逗號(hào)作為分隔符設(shè)置多余一個(gè)包的路徑,每個(gè)映射器將會(huì)在指定的包路徑中遞歸的被搜索到。 注意,沒(méi)有必要去指定 SqlSessionFactory 或 SqlSessionTemplate,因?yàn)?MapperScannerConfigurer 將會(huì)創(chuàng)建 MapperFactoryBean,之后自動(dòng)裝配,但如果使用了一個(gè)以上的 DataSource,那么自動(dòng)裝配可能會(huì)失效。這種情況下,可以使用 sqlSessionFactoryBeanName 或 sqlSessionTemplateBeanName 屬性來(lái)設(shè)置正確的 bean 名稱來(lái)使用。
大白話理解:掃描dao層的接口,MapperScannerConfigurer 會(huì)自動(dòng)為每個(gè)接口生成一個(gè) 接口代理,這個(gè)接口代理是接口的實(shí)現(xiàn)類,并注入到Spring容器中。
2.2 Spring 整合 service 層
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 掃描service相關(guān)的bean --> <context:component-scan base-package="com.fyy.service" /> <!--BookServiceImpl注入到IOC容器中--> <bean id="BookServiceImpl" class="com.fyy.service.BookServiceImpl"> <property name="bookMapper" ref="bookMapper"/> </bean> <!-- 配置事務(wù)管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 注入數(shù)據(jù)庫(kù)連接池 --> <property name="dataSource" ref="dataSource" /> </bean> </beans>
事務(wù)管理器:DataSourceTransactionManager
事務(wù)管理是應(yīng)用系統(tǒng)開(kāi)發(fā)中必不可少的一部分。Spring 為事務(wù)管理提供了豐富的功能支持。Spring 事務(wù)管理分為編碼式和聲明式的兩種方式。編程式事務(wù)指的是通過(guò)編碼方式實(shí)現(xiàn)事務(wù);聲明式事務(wù)基于 AOP,將具體業(yè)務(wù)邏輯與事務(wù)處理解耦。聲明式事務(wù)管理使業(yè)務(wù)代碼邏輯不受污染, 因此在實(shí)際使用中聲明式事務(wù)用的比較多。聲明式事務(wù)有兩種方式,一種是在配置文件(xml)中做相關(guān)的事務(wù)規(guī)則聲明,另一種是基于 @Transactional 注解的方式。
其中 配置文件聲明事務(wù),是將數(shù)據(jù)庫(kù)連接池注入到 事務(wù)管理器中。關(guān)于注解方式聲明事務(wù),就不在這里做過(guò)多介紹,后期會(huì)單獨(dú)拿出來(lái)分享Spring事務(wù)。
3 整合 SpringMVC
web.xml 配置文件
3.1 web.xml 文件是如何執(zhí)行的?
3.1.1 執(zhí)行順序
訪問(wèn)順序?yàn)椋?code>1->2->3->4,其中 2 和 3 的值必須相同。
url-pattern標(biāo)簽代表當(dāng)一個(gè)請(qǐng)求發(fā)送到 servlet 容器時(shí),容器會(huì)先將請(qǐng)求的 url 減去 當(dāng)前應(yīng)用上下文的路徑作為 servlet 的映射 url,比如我訪問(wèn)的是 http://localhost/test/aaa.html,我的應(yīng)用上下文是 test,容器會(huì)將 http://localhost/test 去掉,剩下的 /aaa.html 部分拿來(lái)做 servlet 映射匹配。如果與 設(shè)置的 url-pattern 映射匹配成功,請(qǐng)求才會(huì)被 DispatcherServlet 處理。圖中的 <url-pattern> 中的值為:/,代表所有請(qǐng)求都會(huì)被處理。
而被DispatcherServlet 處理前,還會(huì)經(jīng)過(guò) 2 ,3 步驟,url 匹配成功后,這個(gè) url 訪問(wèn)名為 servlet-name 中值的 servlet,兩個(gè) servlet-name 值必須相同,因?yàn)?servlet 標(biāo)簽中的 servlet-name 標(biāo)簽映射到 servlet-class 標(biāo)簽中的值,最終訪問(wèn) servlet-class 標(biāo)簽中的 DispatcherServlet 類,此時(shí),請(qǐng)求才會(huì)被 DispatcherServlet 處理。
3.1.2 init-param標(biāo)簽
圖中 \標(biāo)簽中的 \標(biāo)簽作用是,設(shè)置 springmvc 配置文件位置以及名稱,springmvc配置文件不設(shè)置默認(rèn)位置是:webapp,可以使用 classpath 設(shè)置文件的名稱為:spring-mvc.xml ,代表 springmvc 配置文件名必須為 spring-mvc.xml,如不使用 classpath 設(shè)置其路徑及名稱,默認(rèn)在 webapp下,名稱為:\標(biāo)簽中的值 + "-servlet.xml",例如:如 標(biāo)簽中值為:springmvc,則默認(rèn)的 springmvc 配置文件名為:springmvc-servlet.xml
3.1.3 load-on-startup標(biāo)簽
圖中 \標(biāo)簽作用是,設(shè)置 servlet加載時(shí)間,如不設(shè)置默認(rèn)在第一次請(qǐng)求訪問(wèn)時(shí)加載 servlet,若設(shè)置此標(biāo)簽值為正整數(shù),會(huì)將 servlet 的加載時(shí)間提前到項(xiàng)目啟動(dòng)時(shí),此標(biāo)簽中可以寫整數(shù),但寫負(fù)整數(shù)和0和沒(méi)有設(shè)置是一樣的效果,只有設(shè)置為正整數(shù)才會(huì)將 servlet 的加載時(shí)間提前到項(xiàng)目啟動(dòng)時(shí),也就是 tomcat 啟動(dòng)時(shí),值越小,代表優(yōu)先級(jí)越高。
3.2 springmvc 配置文件是如何執(zhí)行的?
spring-mvc.xml 配置文件
3.2.1 mvc:annotation-driven作用?
springmvc注解驅(qū)動(dòng)會(huì)自動(dòng)注冊(cè):DefaultAnnotationHandlerMapping 與 AnnotationMethodHandlerAdapter 兩個(gè)bean,這兩個(gè) bean 是 SpringMVC 為 @Controller 分發(fā)請(qǐng)求所必須的,解決了使用 @Controller 注解的前提配置。
在 Spring MVC 3.1 以上:
- DefaultAnnotationHandlerMapping 變更為:RequestMappingHandlerMapping
- AnnotationMethodHandlerAdapter 變更為:RequestMappingHandlerAdapter
通常如果我們希望通過(guò)注解的方式來(lái)進(jìn)行 SpringMVC開(kāi)發(fā),我們會(huì)在 springmvc 配置文件中使用 注解驅(qū)動(dòng):\,那這個(gè)標(biāo)簽做了什么?通過(guò)尋找源碼,找到注解驅(qū)動(dòng)的實(shí)現(xiàn)類是:org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser
我們來(lái)看看這個(gè)類主要做了什么工作?
AnnotationDrivenBeanDefinitionParser類向工廠中注冊(cè)了幾個(gè) bean 實(shí)例,其中包括:
- RequestMappingHandlerMapping
- BeanNameUrlHandlerMapping
- RequestMappingHandlerAdapter
- HttpRequestHandlerAdapter
- SimpleControllerHandlerAdapter
- ExceptionHandlerExceptionResolver
- ResponseStatusExceptionResolver
- DefaultHandlerExceptionResolver
上面的bean實(shí)例都是做什么的呢?
前兩個(gè) bean 是 HandlerMapping 接口的實(shí)現(xiàn)類,用來(lái)處理請(qǐng)求映射的。其中第一個(gè)處理是 @RequestMapping 注解的,第二個(gè)是將 controller 類的名字映射為 請(qǐng)求 url,中間三個(gè) adpter 是用來(lái)處理請(qǐng)求的,具體說(shuō)就是確定調(diào)用哪個(gè) controller 的哪個(gè)方法來(lái)處理當(dāng)前請(qǐng)求,第一個(gè)處理 @Controller 注解的處理器,支持自定義方法參數(shù)和返回值,第二個(gè)是處理繼承 HttpRequestHandler 的處理器,第三個(gè)處理繼承自 Controller 接口的處理器,后面三個(gè)是用來(lái)處理異常的解析器。
結(jié)論
如果使用@Controller 注解,沒(méi)有配置注解驅(qū)動(dòng): <mvc:annotation-driven> 的話,那么所有的請(qǐng)求都無(wú)法找到 DispatcherServlet ,并無(wú)法把請(qǐng)求分發(fā)至控制器。添加注解驅(qū)動(dòng)后,才會(huì)掃描所有帶有 @Controller 注解的類,由 spring 管理并維護(hù)。
3.2.2 mvc:default-servlet-handler作用?
還記得我們?cè)?web.xml 中配置了 url-pattern,用來(lái)過(guò)濾請(qǐng)求,SpringMVC 將接收到的所有請(qǐng)求都看做是一個(gè)普通請(qǐng)求,包括對(duì)于靜態(tài)資源的請(qǐng)求,這樣一來(lái),所有對(duì)于靜態(tài)資源的請(qǐng)求都會(huì)被看做是一個(gè)普通的后臺(tái)控制器請(qǐng)求,而靜態(tài)資源的請(qǐng)求會(huì)因?yàn)檎也坏劫Y源而報(bào)404異常。查看 tomcat 日志就可以看到會(huì)有警告。
對(duì)于此問(wèn)題 SpringMVC 在全局配置文件中提供了一個(gè) <mvc:default-servlet-handler>標(biāo)簽,在 web 容器啟動(dòng)的時(shí)候會(huì)在上下文中定義一個(gè) DefaultServletHttpRequestHandler ,它會(huì)對(duì) DispatcherServlet 請(qǐng)求進(jìn)行處理,如果該請(qǐng)求已經(jīng)做了映射,那么會(huì)接著交給后臺(tái)對(duì)應(yīng)的處理程序,如果沒(méi)有映射,就交給 web 應(yīng)用服務(wù)器默認(rèn)的 servlet 處理,從而找到對(duì)應(yīng)的靜態(tài)資源,只有找不到靜態(tài)資源時(shí)會(huì)報(bào)錯(cuò)。
如果默認(rèn)的 Servlet 容器不用默認(rèn)的 default ,用不同名稱進(jìn)行自定義配置,或者在缺省 Servlet 名稱未知的情況下使用了不同的 Servlet 容器,則必須顯示提供默認(rèn) Servlet 的名稱。
<mvc:default-servlet-handler default-servlet-name="myCustomDefaultServlet"/>
3.2.3 context:component-scan 作用?
掃描組件,將所有使用 @Controller 注解的類作為 SpringMVC 的控制層。其中 base-package 屬性是指定掃描的包。
3.2.4 視圖解析器 作用?
視圖解析器,是將 prefix + 視圖名稱 + suffix = 確定最終要跳轉(zhuǎn)的頁(yè)面,其中視圖名稱是什么?? 處理請(qǐng)求的方法會(huì)返回一個(gè)字符串,這個(gè)字符串即視圖名稱,最終會(huì)通過(guò)配置文件中配置的視圖解析器實(shí)現(xiàn)頁(yè)面的跳轉(zhuǎn)。例如:
@Controller public class TestController { @RequestMapping("hello") public String hello() { System.out.println("success"); return "success"; } } # 其中返回字符串為:success,所以處理此請(qǐng)求最終要跳轉(zhuǎn)的頁(yè)面為:/WEB-INF/view/success.jsp
關(guān)于 SpringMVC的講解可以查看小編的另一篇文章。SpringMVC從基礎(chǔ)到源碼
4 Spring 配置整合文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <import resource="classpath:spirng/spring-dao.xml"/> <import resource="classpath:spirng/spring-service.xml"/> <import resource="classpath:spirng/spring-mvc.xml"/> </beans>
applicationContext.xml,Spring 的核心配置文件,也可以通過(guò)配置文件修改名稱。 什么時(shí)候讀取配置文件,當(dāng)我們?cè)诳蛻舳诵陆?ApplicationContext 實(shí)例時(shí),會(huì)加載此配置文件,其中常用的 ApplicationContext 實(shí)現(xiàn)類有:
- ClassPathXmlApplicationContext
- ClassPathResource
- XmlWebApplicationContext
- FileSystemXmlApplicationContext
- …
其中 \ 是將多個(gè)配置文件通過(guò)導(dǎo)入的方式整合,讓配置信息更清晰,達(dá)到了解耦的效果。
結(jié)束
以上就是本人學(xué)習(xí)ssm框架配置的總結(jié),有的地方不夠深入,但對(duì)于初學(xué)者來(lái)說(shuō)應(yīng)該也會(huì)收獲頗豐,如有錯(cuò)誤,還請(qǐng)大佬們指正!更多相關(guān)ssm框架整合內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JAVA開(kāi)發(fā)環(huán)境Vs?code配置步驟詳解
這篇文章主要為大家介紹了JAVA開(kāi)發(fā)環(huán)境Vs?code配置步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04Shiro整合Springboot和redis,jwt過(guò)程中的錯(cuò)誤shiroFilterChainDefinition問(wèn)
這篇文章主要介紹了Shiro整合Springboot和redis,jwt過(guò)程中的錯(cuò)誤shiroFilterChainDefinition問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04java枚舉使用詳細(xì)介紹及實(shí)現(xiàn)
這篇文章主要介紹了java枚舉使用詳細(xì)介紹及實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-06-06java 基礎(chǔ)知識(shí)之網(wǎng)絡(luò)通信(TCP通信、UDP通信、多播以及NIO)總結(jié)
這篇文章主要介紹了java 基礎(chǔ)知識(shí)之網(wǎng)絡(luò)通信總結(jié)的相關(guān)資料,包括TCP通信、UDP通信、多播以及NIO,需要的朋友可以參考下2017-03-03SpringBoot多數(shù)據(jù)源配置方式以及報(bào)錯(cuò)問(wèn)題的解決
這篇文章主要介紹了SpringBoot多數(shù)據(jù)源配置方式以及報(bào)錯(cuò)問(wèn)題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07mybatis攔截器實(shí)現(xiàn)通用權(quán)限字段添加的方法
這篇文章主要給大家介紹了關(guān)于mybatis攔截器實(shí)現(xiàn)通用權(quán)限字段添加的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mybatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Java數(shù)組常見(jiàn)應(yīng)用詳解【創(chuàng)建、遍歷、排序、查找】
這篇文章主要介紹了Java數(shù)組常見(jiàn)應(yīng)用,結(jié)合實(shí)例形式詳細(xì)分析了java數(shù)組的基本定義、創(chuàng)建、遍歷、排序、查找等相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下2020-02-02