前言
spring作為主流的 Java Web 開(kāi)發(fā)的開(kāi)源框架,是Java 世界最為成功的框架,持續(xù)不斷深入認(rèn)識(shí)spring框架是Java程序員不變的追求。
本篇博客介紹SpringBootApplicant注解的自動(dòng)加載相關(guān)內(nèi)容
其他相關(guān)的Spring博客文章列表如下:
Spring基礎(chǔ)(核心容器)——從配置文件到注解開(kāi)發(fā) & 創(chuàng)建對(duì)象+成員變量賦值IOC & 增強(qiáng)方法AOP
Spring進(jìn)階(AOP的理解)——靜態(tài)/動(dòng)態(tài)代理 & 面向切面編程AOP(Aspect Oriented Programming) & 日志記錄 & 增強(qiáng)方法
Spring進(jìn)階(AOP的應(yīng)用)—— 動(dòng)態(tài)代理AOP后controller層的private方法訪問(wèn)失效的問(wèn)題
Spring基礎(chǔ)(Web-MVC)——在idea中新建springWeb項(xiàng)目 & 瀏覽器請(qǐng)求 和 服務(wù)器響應(yīng) & SpringMvc文件相關(guān)
SpringMvc框架——【深入】SpringMVC 的運(yùn)行流程:從客戶端發(fā)送請(qǐng)求request到springMvc框架返回響應(yīng)response的全流程分析 & DispatcherServlet
SpringBoot基礎(chǔ)——追根溯源servlet是啥,tomcat是啥,maven是啥 & springBoot項(xiàng)目初步,maven構(gòu)建,打包 & 測(cè)試
引出
1.mybatis相關(guān)包導(dǎo)入沒(méi)寫(xiě)配置,@SpringBootApplication注解加入排除自動(dòng)裝配的相關(guān)內(nèi)容;
2.在分布式架構(gòu)下,如果某個(gè)模塊想要其他模塊下的類,需要加入@ComponentScan(basePackages = “com.tianju.domain”)進(jìn)行包的掃描;
3.如果不加包掃描的注解,則需要在想要被注入到spring容器中的模塊的resource下,即根目錄下新建文件夾META-INF,新建文件spring.factories,寫(xiě)相關(guān)內(nèi)容;
mybatis相關(guān)包導(dǎo)入沒(méi)寫(xiě)配置
1.@SpringBootApplication注解
2.如果沒(méi)有寫(xiě)url等相關(guān)配置
導(dǎo)入了mysql,mybatis,druid的依賴,但是application.yml文件中沒(méi)有寫(xiě)相關(guān)的數(shù)據(jù)源url等的配置
此時(shí),需要在注解@SpringBootApplication中加入排除自動(dòng)裝配的相關(guān)內(nèi)容;加入排除后,再次啟動(dòng)項(xiàng)目,不再報(bào)錯(cuò)。
package com.tianju;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@SpringBootApplication(exclude =
{DruidDataSourceAutoConfigure.class,
DataSourceAutoConfiguration.class}
)
public class TestApp {
public static void main(String[] args) {
SpringApplication.run(TestApp.class);
}
}
分布式架構(gòu)下如何加載其他模塊的類
mybatisplus使用分頁(yè)插件,攔截器策略,在在一個(gè)引入位置寫(xiě)攔截器,其它模塊引入配置類,需要使用@ComponentScan(base="配置類所在的包)
1.單體架構(gòu)的一般模式
package com.tinaju.bm.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 分頁(yè)需要加一個(gè)攔截器
*/
@Configuration
public class MybatisPlusConfig {
@Bean // 放到容器中
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
paginationInnerInterceptor.setDbType(DbType.MYSQL);
paginationInnerInterceptor.setOverflow(true);
mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor);
return mybatisPlusInterceptor;
}
}
在單體模式下,會(huì)自動(dòng)掃描主啟動(dòng)類同級(jí)下面的注解,就掃描到了標(biāo)了注解的@Configuration 的分頁(yè)攔截器
2.分布式架構(gòu)的模式
在分布式架構(gòu)下,如果某個(gè)模塊想要其他模塊下的類,需要加入@ComponentScan(basePackages = “com.tianju.domain”)進(jìn)行包的掃描
package com.tianju.smovie.genre;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@SpringBootApplication
@EnableDiscoveryClient
//@EnableJpaRepositories // 不加會(huì)報(bào)錯(cuò) Not a managed type: class com.tianju.domain.entity.Genre
@EntityScan(basePackages = "com.tianju.domain.entity") // TODO:jpa需要加這個(gè)
@ComponentScan(basePackages = "com.tianju.domain")
public class GenreApp {
public static void main(String[] args) {
SpringApplication.run(GenreApp.class);
}
}
如果不加的話,就不會(huì)加載到容器中
另一種方式:設(shè)置自動(dòng)裝配
如果不加上面包掃描的注解,則需要在想要被注入到spring容器中的模塊的resource下,即根目錄下新建文件夾META-INF,新建文件spring.factories,寫(xiě)相關(guān)內(nèi)容。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.tianju.domain.config.MybatisPlusConfig
排除在外相關(guān)
問(wèn)題:使用nacos的時(shí)候怎么發(fā)現(xiàn)的?
如下圖所示,nacos里面就有文件夾META-INF,下面有個(gè)文件spring.factories,里面的東西就會(huì)被加載進(jìn)來(lái)
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-722137.html
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration,\
com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration,\
com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration,\
com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration,\
com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClientConfiguration,\
com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration,\
com.alibaba.cloud.nacos.loadbalancer.LoadBalancerNacosAutoConfiguration,\
com.alibaba.cloud.nacos.NacosServiceAutoConfiguration,\
com.alibaba.cloud.nacos.util.UtilIPv6AutoConfiguration
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.alibaba.cloud.nacos.discovery.configclient.NacosDiscoveryClientConfigServiceBootstrapConfiguration
org.springframework.boot.SpringApplicationRunListener=\
com.alibaba.cloud.nacos.logging.NacosLoggingAppRunListener
總結(jié)
1.mybatis相關(guān)包導(dǎo)入沒(méi)寫(xiě)配置,@SpringBootApplication注解加入排除自動(dòng)裝配的相關(guān)內(nèi)容;
2.在分布式架構(gòu)下,如果某個(gè)模塊想要其他模塊下的類,需要加入@ComponentScan(basePackages = “com.tianju.domain”)進(jìn)行包的掃描;
3.如果不加包掃描的注解,則需要在想要被注入到spring容器中的模塊的resource下,即根目錄下新建文件夾META-INF,新建文件spring.factories,寫(xiě)相關(guān)內(nèi)容;文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-722137.html
到了這里,關(guān)于@SpringBootApplication注解的理解——如何排除自動(dòng)裝配 & 分布式情況下如何自動(dòng)加載 & nacos是怎么被發(fā)現(xiàn)的的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!