欧美1区2区3区激情无套,两个女人互添下身视频在线观看,久久av无码精品人妻系列,久久精品噜噜噜成人,末发育娇小性色xxxx

別再重復(fù)造輪子!SpringBoot 內(nèi)置的 20個(gè)高效工具類(lèi)

SpringBoot 內(nèi)置的 20 個(gè)高效工具類(lèi)

還在自己寫(xiě)工具類(lèi)?你已經(jīng)被SpringBoot拋棄了!很多人嘴上說(shuō)“別重復(fù)造輪子”,結(jié)果還在項(xiàng)目里一遍遍寫(xiě)String工具、Bean拷貝、文件處理、反射操作……

SpringBoot 內(nèi)置了 20個(gè)寶藏工具類(lèi),輕量級(jí)、性能強(qiáng)、低耦合,很多大廠架構(gòu)師都在用,可你可能連名字都沒(méi)聽(tīng)過(guò)!

有人說(shuō):“用這些就像開(kāi)了外掛?!币灿腥苏f(shuō):“太黑箱,寧愿自己寫(xiě)。”你怎么看?

一、數(shù)據(jù)處理

1. StringUtils

Spring 提供的 StringUtils 相比 Apache Commons Lang 版本更加輕量,且與 Spring 生態(tài)完美集成。它提供了字符串判空、截取、拼接等常用操作,比如:

// 判斷字符串是否為空
StringUtils.isEmpty(str); 

// 判斷字符串是否有內(nèi)容
StringUtils.hasText(str);

// 數(shù)組合并成字符串
StringUtils.arrayToCommaDelimitedString(arr);

2. ObjectUtils

處理對(duì)象判空和默認(rèn)值時(shí),不要再寫(xiě) if-else 了:

// 安全判空
ObjectUtils.isEmpty(obj);

// 獲取第一個(gè)非空對(duì)象
ObjectUtils.firstNonNull(obj1, obj2, defaultValue);

// 空安全toString
ObjectUtils.nullSafeToString(obj);

3. CollectionUtils

Spring 的集合工具類(lèi)讓集合操作更加優(yōu)雅:

// 集合判空
CollectionUtils.isEmpty(collection);

// 查找第一個(gè)匹配元素
CollectionUtils.find(collection, predicate);

// 合并數(shù)組
CollectionUtils.mergeArrayIntoCollection(arr, collection);

二、HTTP 請(qǐng)求

1. RestTemplate傳統(tǒng)同步請(qǐng)求

雖然已被標(biāo)記為過(guò)時(shí),但在非響應(yīng)式項(xiàng)目中依然實(shí)用:

// 簡(jiǎn)單GET請(qǐng)求
String result = restTemplate.getForObject(url, String.class);

// 帶參數(shù)的POST請(qǐng)求
ResponseEntity<String> response = restTemplate.postForEntity(
    url, request, String.class);

2. WebClient

Spring 5 引入的響應(yīng)式 HTTP 客戶端:

WebClient.create()
    .get()
    .uri(url)
    .retrieve()
    .bodyToMono(String.class)
    .subscribe(result -> System.out.println(result));

3. TestTemplate

專(zhuān)門(mén)為測(cè)試設(shè)計(jì)的增強(qiáng)版 RestTemplate:

@Test
public void testApi() {
    ResponseEntity<String> response = testRestTemplate
        .getForEntity("/api/test", String.class);
    assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}

4. MockRestServiceServer

測(cè)試時(shí)模擬外部 API 調(diào)用:

MockRestServiceServer server = MockRestServiceServer
    .bindTo(restTemplate).build();

server.expect(requestTo("/external/api"))
    .andRespond(withSuccess("mock response", MediaType.APPLICATION_JSON));

三、緩存 & 異步

1. CacheManager

Spring 的緩存抽象層支持多種實(shí)現(xiàn):

@Cacheable(value = "users", key = "#id")
public User getUser(Long id) {
    // 數(shù)據(jù)庫(kù)查詢
}

@CacheEvict(value = "users", key = "#id")
public void updateUser(User user) {
    // 更新邏輯
}

2. @Async + TaskExecutor

輕松實(shí)現(xiàn)方法異步執(zhí)行:

@Async
public CompletableFuture<User> asyncGetUser(Long id) {
    // 耗時(shí)操作
    return CompletableFuture.completedFuture(user);
}

// 配置線程池
@Bean
public TaskExecutor taskExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(5);
    return executor;
}

3. EventPublishe

實(shí)現(xiàn)應(yīng)用內(nèi)事件發(fā)布訂閱:

// 定義事件
public class UserRegisteredEvent extends ApplicationEvent {
    public UserRegisteredEvent(User user) {
        super(user);
    }
}

// 發(fā)布事件
applicationEventPublisher.publishEvent(new UserRegisteredEvent(user));

// 監(jiān)聽(tīng)事件
@EventListener
public void handleEvent(UserRegisteredEvent event) {
    // 處理邏輯
}

四、校驗(yàn) & 日志

1. Assert

Spring 的斷言工具讓參數(shù)檢查更簡(jiǎn)潔:

// 參數(shù)校驗(yàn)
Assert.notNull(param, "參數(shù)不能為空");
Assert.isTrue(value > 0, "值必須大于0");

// 狀態(tài)檢查
Assert.state(isValid, "狀態(tài)不合法");

2. @Validated + BindingResult

結(jié)合 JSR-303 實(shí)現(xiàn)參數(shù)校驗(yàn):

@PostMapping("/users")
public ResponseEntity createUser(
    @Validated @RequestBody User user,
    BindingResult result) {
    
    if (result.hasErrors()) {
        // 處理校驗(yàn)錯(cuò)誤
    }
    // 業(yè)務(wù)邏輯
}

3. Logback/Log4j2

SpringBoot 自動(dòng)配置的日志系統(tǒng):

# application.properties
logging.level.root=INFO
logging.level.com.example=DEBUG
logging.file.name=app.log
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n

五、測(cè)試 & 調(diào)試

1. MockMvc

測(cè)試 Controller 層的利器:

@SpringBootTest
@AutoConfigureMockMvc
class UserControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    void testGetUser() throws Exception {
        mockMvc.perform(get("/users/1"))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$.name").value("張三"));
    }
}

2. OutputCapture

捕獲并驗(yàn)證日志輸出:

@SpringBootTest
class LoggingTest {

    @Autowired
    private MyService service;

    @Rule
    public OutputCapture outputCapture = new OutputCapture();

    @Test
    void testLogging() {
        service.doSomething();
        assertThat(outputCapture.toString())
            .contains("操作已完成");
    }
}

3. TestPropertyValues

靈活修改測(cè)試環(huán)境配置:

@Test
void testWithDynamicProperties() {
    TestPropertyValues.of(
        "app.timeout=5000",
        "app.enabled=true"
    ).applyTo(environment);
    
    // 執(zhí)行測(cè)試
}

4. SpringBootTest

完整的集成測(cè)試支持:

@SpringBootTest(
    webEnvironment = WebEnvironment.RANDOM_PORT,
    properties = {"app.env=test"}
)
class FullIntegrationTest {

    @LocalServerPort
    private int port;

    @Test
    void testFullStack() {
        // 測(cè)試完整應(yīng)用棧
    }
}

六、冷門(mén)但實(shí)用的工具

1. BannerCustomizer

讓?xiě)?yīng)用啟動(dòng)更有個(gè)性:

@Bean
public BannerCustomizer myBannerCustomizer() {
    return banner -> {
        banner.setBanner(new ResourceBanner(
            new ClassPathResource("banner.txt")));
        banner.setMode(Banner.Mode.LOG);
    };
}

2. Environment

靈活訪問(wèn)環(huán)境變量和配置:

@Autowired
private Environment env;

public void someMethod() {
    String dbUrl = env.getProperty("spring.datasource.url");
    boolean debug = env.getProperty("app.debug", Boolean.class, false);
}

3. SpelExpressionParser

運(yùn)行時(shí)執(zhí)行 SpEL 表達(dá)式:

ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("name.toUpperCase()");

String result = exp.getValue(userContext, String.class);
#SpringBoot#
全部評(píng)論
mark
點(diǎn)贊 回復(fù) 分享
發(fā)布于 05-08 12:23 湖北

相關(guān)推薦

04-27 10:47
已編輯
途虎_招聘專(zhuān)員
途虎養(yǎng)車(chē)春季招聘持續(xù)火熱進(jìn)行中!沒(méi)錯(cuò)!還在招!校招沒(méi)有投遞過(guò)JAVA崗位的同學(xué)們可以重點(diǎn)沖,簡(jiǎn)歷缺口大且進(jìn)面幾率高!已經(jīng)投遞過(guò)的同學(xué)也不要著急,筆試面試都在同步開(kāi)展,我們會(huì)根據(jù)崗位需求和部門(mén)實(shí)際情況陸續(xù)推進(jìn)。如果沒(méi)有收到后續(xù)消息,可以再耐心等一等。一、崗位介紹JAVA開(kāi)發(fā)工程師崗位職責(zé):1、負(fù)責(zé)途虎各類(lèi)后臺(tái)服務(wù)和業(yè)務(wù)模塊的需求分析、系統(tǒng)設(shè)計(jì)和開(kāi)發(fā)實(shí)現(xiàn);2、參與后端模塊、數(shù)據(jù)平臺(tái)、基礎(chǔ)服務(wù)等開(kāi)發(fā)工作;3、分析并優(yōu)化業(yè)務(wù)流程,參與系統(tǒng)長(zhǎng)期架構(gòu)設(shè)計(jì)與規(guī)劃,探索合理、可擴(kuò)展的系統(tǒng)模型;4、保證代碼質(zhì)量和執(zhí)行效率,提升系統(tǒng)的可用性和可維護(hù)性;優(yōu)化系統(tǒng)性能,及時(shí)排查線上故障,保證系統(tǒng)穩(wěn)定;5、積極主動(dòng)協(xié)同...
點(diǎn)贊 評(píng)論 收藏
分享
評(píng)論
4
5
分享

創(chuàng)作者周榜

更多
正在熱議
更多
# 面試問(wèn)題記錄 #
75128次瀏覽 1066人參與
# 工作中,你有沒(méi)有遇到非常愛(ài)罵人的領(lǐng)導(dǎo)? #
20843次瀏覽 145人參與
# 京東TGT #
54709次瀏覽 188人參與
# 上班到公司第一件事做什么? #
41254次瀏覽 383人參與
# 硬件人的簡(jiǎn)歷怎么寫(xiě) #
258117次瀏覽 2901人參與
# 求職季如何保持心態(tài)不崩 #
107911次瀏覽 887人參與
# 找工作的破防時(shí)刻 #
2671次瀏覽 41人參與
# 工作時(shí)那些社死瞬間 #
26541次瀏覽 199人參與
# 拼多多工作體驗(yàn) #
18219次瀏覽 153人參與
# 互聯(lián)網(wǎng)行業(yè)現(xiàn)在還值得去嗎 #
7770次瀏覽 42人參與
# 技術(shù)轉(zhuǎn)行的心路歷程 #
48862次瀏覽 665人參與
# 選完offer后,你后悔學(xué)本專(zhuān)業(yè)嗎 #
39209次瀏覽 217人參與
# 你覺(jué)得技術(shù)面多長(zhǎng)時(shí)間合理? #
87628次瀏覽 647人參與
# 國(guó)企和大廠硬件兄弟怎么選? #
121366次瀏覽 1657人參與
# 你遇到過(guò)哪些神仙同事 #
75914次瀏覽 668人參與
# 安利/避雷我的專(zhuān)業(yè) #
67473次瀏覽 497人參與
# 面試經(jīng)驗(yàn)談 #
51401次瀏覽 825人參與
# 實(shí)習(xí)生應(yīng)該準(zhǔn)時(shí)下班嗎 #
204156次瀏覽 1329人參與
# 米哈游求職進(jìn)展匯總 #
323474次瀏覽 2224人參與
# 面試吐槽bot #
18986次瀏覽 109人參與
# 工作一周年分享 #
20571次瀏覽 113人參與
牛客網(wǎng)
??推髽I(yè)服務(wù)