{"id":655781,"date":"2025-11-05T13:10:48","date_gmt":"2025-11-05T12:10:48","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=idea&#038;p=655781"},"modified":"2026-01-30T10:43:52","modified_gmt":"2026-01-30T09:43:52","slug":"java-annotated-monthly-november-2025","status":"publish","type":"idea","link":"https:\/\/blog.jetbrains.com\/ko\/idea\/2025\/11\/java-annotated-monthly-november-2025","title":{"rendered":"Java Annotated Monthly \u2013 November 2025"},"content":{"rendered":"\n<p>This edition is packed with insightful, practical, and curiosity-fueling reads. From hands-on advice to thought-provoking pieces, we\u2019ve gathered a nice selection of stories that will help you stay sharp and inspired in the tech world.<\/p>\n\n\n\n<p>We\u2019re also happy to have <a href=\"https:\/\/joshlong.com\/\" target=\"_blank\" rel=\"noopener\">Josh Long<\/a> as our featured content author this month! Expect some top-notch insights and a good dose of Spring.<\/p>\n\n\n\n<p>So, grab your coffee and dive in \u2013 there\u2019s plenty worth reading inside!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Featured Content<\/h2>\n\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                                                            <div class=\"about-author__box-img\">\n                            <img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/11\/josh-hero-image.2ac6dba0.png\" alt=\"\" loading=\"lazy\">\n                        <\/div>\n                                        <div class=\"about-author__box-text\">\n                                                    <h4>Josh Long <\/h4>\n                                                <p><span style=\"font-weight: 400;\">Josh Long works on the Spring team as its number one fan. You can find more of his content \u2013 blogs, Youtube content, podcasts, etc. \u2013 on his <\/span><a href=\"https:\/\/joshlong.com\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">website<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n                    <\/div>\n                            <\/div>\n        <\/div>\n    <\/div>\n\n\n\n<p>Hi, Spring fans! Spring Boot 4 comes out in November 2025! With this in mind, lLet&#8217;s at least look at some of my favorite features together. <strong>Jakarta EE 11<\/strong> is the new baseline. We&#8217;ve retained a <strong>Java 17<\/strong> baseline but <em>strongly<\/em> encourage a Java 25 posture whenever possible. We&#8217;ve moved the baseline to <strong>GraalVM 25<\/strong> for native images and updated our <strong>Kotlin<\/strong> support to Kotlin 2.2. The new generation of projects assumes the new <strong>Jackson 3<\/strong>. We&#8217;ve introduced <strong>JSpecify nullability<\/strong> annotations across the portfolio to finally eliminate Tony Hoare&#8217;s $1 billion dollar mistake \u2013 null references. Spring Boot 4 has decomposed the autoconfiguration artifact into smaller, more <strong>modular autoconfigurations<\/strong>.<\/p>\n\n\n\n<p>One of my favorite new features is <strong>API versioning<\/strong>. Here&#8217;s a Spring MVC controller with two endpoints, each designated a particular version, the default version of which we can specify with <code>spring.mvc.apiversion.default=1.1<\/code>.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@RestController\n\nclass DogsController {\n\n\u00a0\u00a0\u00a0\u00a0...\n\n\u00a0\u00a0\u00a0\u00a0@GetMapping(value = \"\/dogs\",version=\"1.0\")\n\n\u00a0\u00a0\u00a0\u00a0Collection&lt;Map&lt;String, Object>> dogsClassic() {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0...\u00a0\n\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0@GetMapping(value = \"\/dogs\", version = \"1.1\")\n\n\u00a0\u00a0\u00a0\u00a0Collection&lt;Dog> dogs() {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0...\u00a0\n\n\u00a0\u00a0\u00a0\u00a0}\n\n}<\/pre>\n\n\n\n<p>I also love the new easy-mode declarative HTTP clients. Let&#8217;s build a client to talk to the Cat Facts API and then activate it using <code>@ImportHttpServices(CatFacts.class)<\/code>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">record CatFact(@JsonProperty(\"fact_number\") int factNumber, String fact) { }\n\nrecord CatFactsResponse(Collection&lt;CatFact> facts) { }\n\ninterface CatFacts {\n\n\u00a0\u00a0\u00a0\u00a0@GetExchange(\"https:\/\/www.catfacts.net\/api\")\n\n\u00a0\u00a0\u00a0\u00a0CatFactsResponse facts();\n\n}<\/pre>\n\n\n\n<p>We built a simple client, and it should work, but what if the service is down? In this case, we can enable <strong>resilient methods<\/strong> with Spring&#8217;s new <code>@EnableResilientMethods<\/code> annotation. This gives us two new features: <code>@ConcurrencyLimit <\/code>and<code> @Retryable<\/code> (and the related RetryTemplate).<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">...\n\n\u00a0\u00a0\u00a0\u00a0@ConcurrencyLimit(10)\n\n\u00a0\u00a0\u00a0\u00a0@Retryable(maxAttempts = 4, includes = BadException.class)\n\n\u00a0\u00a0\u00a0\u00a0@GetMapping(\"\/facts\")\n\n\u00a0\u00a0\u00a0\u00a0Collection&lt;CatFact> facts()\u00a0 throws Exception {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0...\n\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0...<\/pre>\n\n\n\n<p>&nbsp; &nbsp; <\/p>\n\n\n\n<p>Spring Framework 7 brings <code>BeanRegistrar<\/code> configuration, which is a more dynamic alternative to Java configuration that can be used in conjunction with Java configuration and component scanning with the usual <code>@Import<\/code> annotation.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class MyBeanRegistrar implements BeanRegistrar {\n\n\u00a0\u00a0\u00a0\u00a0@Override\n\n\u00a0\u00a0\u00a0\u00a0public void register(BeanRegistry registry, Environment env) {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0registry.registerBean(Runner.class);\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0registry.registerBean(Runner.class, spec -> spec\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.description(\"description\")\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.supplier(supplierContext -> new Runner(\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0supplierContext.bean(DogRepository.class), supplierContext.beanProvider(CatFacts.class)\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.getIfUnique())\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0));\n\n\u00a0\u00a0\u00a0\u00a0}\n\n}<\/pre>\n\n\n\n<p>Spring Security brings with it a lot of nice new features. Two of my favorites are multi-factor auth, allowing you to require that multiple authentication factors be present, and <code>Customizer&lt;HttpSecurity&gt;<\/code> beans for additive changes to the <code>HttpSecurity<\/code> configuration.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@EnableGlobalMultiFactorAuthentication(\n\n\u00a0\u00a0\u00a0\u00a0authorities = { FactorGrantedAuthority.PASSWORD_AUTHORITY, FactorGrantedAuthority.OTT_AUTHORITY })\n\n@Configuration\n\nclass SecurityConfiguration {\n\n\u00a0\u00a0\u00a0\u00a0@Bean\n\n\u00a0\u00a0\u00a0\u00a0Customizer&lt;HttpSecurity> httpSecurityCustomizer() {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return httpSecurity -> httpSecurity\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.webAuthn(w -> ... )\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.oneTimeTokenLogin(ott -> ... );\n\n\u00a0\u00a0\u00a0\u00a0}\n\n}<\/pre>\n\n\n\n<p>The code is here for your <a href=\"https:\/\/github.com\/joshlong-attic\/2025-11-02-jetbrains-jam-article-on-spring-boot-4\" target=\"_blank\" rel=\"noopener\">reference<\/a>. I encourage users to kick the tires and try everything out on the <a href=\"https:\/\/start.spring.io\" target=\"_blank\" rel=\"noopener\">Spring Initializer<\/a> \u2013 and enjoy your journey to production!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Java News<\/h2>\n\n\n\n<p>Stay in the loop with the latest from the Java world:<\/p>\n\n\n\n<ul>\n<li>Java News Roundup <a href=\"https:\/\/www.infoq.com\/news\/2025\/10\/java-news-roundup-oct06-2025\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">1<\/a>, <a href=\"https:\/\/www.infoq.com\/news\/2025\/10\/java-news-roundup-oct13-2025\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">2<\/a>, <a href=\"https:\/\/www.infoq.com\/news\/2025\/10\/java-news-roundup-oct20-2025\/\" target=\"_blank\" rel=\"noopener\">3<\/a>, <a href=\"https:\/\/www.infoq.com\/news\/2025\/11\/java-news-roundup-oct27-2025\/\" target=\"_blank\" rel=\"noopener\">4<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2025\/10\/03\/inside-java-newsletter\/\" target=\"_blank\" rel=\"noopener\">The Inside Java Newsletter: Java 25 is Live!<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2025\/10\/22\/quality-heads-up\/\" target=\"_blank\" rel=\"noopener\">HTTP\/3 Support in JDK 26<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/nipafx.dev\/inside-java-newscast-99\" target=\"_blank\" rel=\"noopener\">Three G1 Improvements &#8211; Inside Java Newscast #99<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2025\/10\/26\/jep517-target-jdk26\/\" target=\"_blank\" rel=\"noopener\">JEP targeted to JDK 26: 517: HTTP\/3 for the HTTP Client API<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2025\/10\/27\/try-jep-401-value-classes\/\" target=\"_blank\" rel=\"noopener\">Try Out JEP 401 Value Classes and Objects<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/openjdk.org\/jeps\/504\" target=\"_blank\" rel=\"noopener\">JEP targeted to JDK 26: 504: Remove the Applet API<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Java Tutorials and Tips<\/h2>\n\n\n\n<p>Keep exploring pro tips that make your Java experience even better:<\/p>\n\n\n\n<ul>\n<li><a href=\"https:\/\/neilmadden.blog\/2025\/09\/12\/rating-26-years-of-java-changes\/\" target=\"_blank\" rel=\"noopener\">Rating 26 years of Java changes<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=ZWec2QyAl_k\" target=\"_blank\" rel=\"noopener\">Be more productive with IntelliJ IDEA by Marit van Dijk<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2025\/10\/07\/java-and-ai-powering-enterprise-intelligence\/\" target=\"_blank\" rel=\"noopener\">Java and AI: Powering Scalable, Enterprise-Grade Intelligence<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2025\/10\/09\/devoxxstream\/\" target=\"_blank\" rel=\"noopener\">\u201cJust Make All Exceptions Unchecked\u201d &#8211; Live Q&amp;A from Devoxx<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2025\/10\/13\/devoxxbelgium-pattern-matching\/\" target=\"_blank\" rel=\"noopener\">Pattern Matching, Under the Microscope<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2025\/10\/16\/devoxxbelgium-structured-concurrency-action\/\" target=\"_blank\" rel=\"noopener\">Structured Concurrency in Action<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/foojay.io\/today\/7-habits-of-highly-effective-java-coding\/\" target=\"_blank\" rel=\"noopener\">7 Habits of Highly Effective Java Coding<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2025\/10\/14\/devoxxbelgium-java-for-ai\/\" target=\"_blank\" rel=\"noopener\">Java for AI<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2025\/10\/07\/java-and-ai-powering-enterprise-intelligence\/\" target=\"_blank\" rel=\"noopener\">Java and AI: Powering Scalable, Enterprise-Grade Intelligence<\/a>&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2025\/10\/17\/new-in-jdk-25-2-mins\/\" target=\"_blank\" rel=\"noopener\">What\u2019s New in Java 25 in 25 Minutes &#8211; Sip of Java<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2025\/10\/18\/devoxxbelgium-java-performance-update\/\" target=\"_blank\" rel=\"noopener\">From JDK 21 to JDK 25 &#8211; Java Performance Update 2025<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2025\/10\/20\/jdk-25-performance-improvements\/\" target=\"_blank\" rel=\"noopener\">Performance Improvements in JDK 25<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2025\/10\/29\/aiworld-java-for-ai\/\" target=\"_blank\" rel=\"noopener\">AI World: Georges Saab Unveils Java 25 for AI and Cloud<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2025\/10\/21\/jvmls-assembling-project-leyden\/\" target=\"_blank\" rel=\"noopener\">Assembling Project Leyden #JVMLS<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/blog.joda.org\/2025\/10\/type-conversion-in-java-alternative.html\" target=\"_blank\" rel=\"noopener\">Type conversion in Java &#8211; an alternative proposal for primitive type patterns<\/a>&nbsp;<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Kotlin Corner<\/h2>\n\n\n\n<p>Your dose of Kotlin news and tips is here:<\/p>\n\n\n\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=QWpp5-LlTqA\" target=\"_blank\" rel=\"noopener\">What&#8217;s new in Kotlin 2.2.21 (and 2.2.20!)&nbsp;<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=1zY4_iDyFco\" target=\"_blank\" rel=\"noopener\">Discussing Kotlin Coroutines with Marcin Moska\u0142a | Talking Kotlin 141<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=TAtU7joTGaA\" target=\"_blank\" rel=\"noopener\">Your First AI Agent in Kotlin<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/blog.jetbrains.com\/ai\/2025\/10\/koog-0-5-0-is-out-smarter-tools-persistent-agents-and-simplified-strategy-design\/\">Koog 0.5.0 Is Out: Smarter Tools, Persistent Agents, and Simplified Strategy Design<\/a>&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/blog.jetbrains.com\/ai\/2025\/10\/koog-a2a-building-connected-ai-agents-in-kotlin\/\">Koog \u00d7 A2A: Building Connected AI Agents in Kotlin&nbsp;<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/blog.kotlin-academy.com\/non-graph-strategies-and-when-to-use-them-in-ai-agents-eb0cee6dba73\" target=\"_blank\" rel=\"noopener\">Non-graph strategies, and when to use them in AI agents<\/a>&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/serranofp.com\/blog\/context-params.html\" target=\"_blank\" rel=\"noopener\">Context parameters and API design<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sam-cooper.medium.com\/the-country-that-broke-kotlin-84bdd0afb237\" target=\"_blank\" rel=\"noopener\">The Country That Broke Kotlin<\/a>&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/proandroiddev.com\/baking-with-functions-a-guide-to-higher-order-functions-and-lambdas-in-kotlin-615846d0f74a\" target=\"_blank\" rel=\"noopener\">Baking with functions: A guide to higher-order functions and lambdas in Kotlin<\/a>&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6jamtsBmPOQ\" target=\"_blank\" rel=\"noopener\">Better immutability in Kotlin with Valhalla #JVMLS<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">AI&nbsp;<\/h2>\n\n\n\n<p>Don\u2019t miss what\u2019s buzzing in the AI world:<\/p>\n\n\n\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/blog\/2025\/10\/28\/the-launch-of-developer-productivity-ai-arena-an-open-platform-for-benchmarking-ai-coding-agents\/\">The Launch of Developer Productivity AI Arena: An Open Platform for Benchmarking AI Coding Agents<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=2l1GBp80CbY&amp;list=PLRsbF2sD7JVrgzHNkX4wUHmoGICMaE446\" target=\"_blank\" rel=\"noopener\">Fault tolerant AI Agents on the JVM with Koog framework by Vadim Briliantov<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.infoq.com\/presentations\/agentic-ai\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">Beyond the Hype: Architecting Systems with Agentic AI<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/blog.jetbrains.com\/matter\/2025\/10\/introducing-matter-the-ai-development-companion-for-product-teams\/\">Introducing Matter: The AI Development Companion for Product Teams<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/foojay.io\/today\/agents-meet-databases-the-future-of-agentic-architectures\/\" target=\"_blank\" rel=\"noopener\">Agents Meet Databases: The Future of Agentic Architectures<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/foojay.io\/today\/foojay-podcast-79-ai4devs-interviews-part-1\/\" target=\"_blank\" rel=\"noopener\">Foojay Podcast #79: AI4Devs Interviews \u2013 Part 1<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/dzone.com\/articles\/infusing-ai-into-your-java-applications\" target=\"_blank\" rel=\"noopener\">Infusing AI into Your Java Applications<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.infoq.com\/news\/2025\/10\/openai-llm-hallucinations\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">OpenAI Study Investigates the Causes of LLM Hallucinations and Potential Solutions<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.infoq.com\/presentations\/observability-llm\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">Why Observability Matters (More!) with AI Applications<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.infoq.com\/news\/2025\/10\/chatgpt-atlas\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">OpenAI Launches ChatGPT Atlas, a Browser With ChatGPT Built In<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Languages, Frameworks, Libraries, and Technologies<\/h2>\n\n\n\n<p>Explore everything new and exciting in tech right here:<\/p>\n\n\n\n<ul>\n<li>This Week in Spring <a href=\"https:\/\/spring.io\/blog\/2025\/10\/07\/this-week-in-spring-october-7th-2025\" target=\"_blank\" rel=\"noopener\">1<\/a>, <a href=\"https:\/\/spring.io\/blog\/2025\/10\/14\/this-week-in-spring-october-14th-2025\" target=\"_blank\" rel=\"noopener\">2<\/a>, <a href=\"https:\/\/spring.io\/blog\/2025\/10\/21\/this-week-in-spring-october-21st-2025\" target=\"_blank\" rel=\"noopener\">3<\/a>, <a href=\"https:\/\/spring.io\/blog\/2025\/10\/28\/this-week-in-spring-october-28th-2025\" target=\"_blank\" rel=\"noopener\">4<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/spring.io\/blog\/2025\/09\/30\/spring-ai-mcp-server-security\" target=\"_blank\" rel=\"noopener\">Securing MCP Servers with Spring AI<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/spring.io\/blog\/2025\/10\/28\/modularizing-spring-boot\" target=\"_blank\" rel=\"noopener\">Modularizing Spring Boot<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/foojay.io\/today\/beyond-keywords-implementing-semantic-search-in-java-with-spring-data-part-1\/\" target=\"_blank\" rel=\"noopener\">Beyond Keywords: Implementing Semantic Search in Java With Spring Data (Part 1)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/foojay.io\/today\/transactions-and-threadlocal-in-spring\/\" target=\"_blank\" rel=\"noopener\">Transactions and ThreadLocal in Spring<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/foojay.io\/today\/explore-spring-framework-7-features-api-versioning\/\" target=\"_blank\" rel=\"noopener\">Explore Spring Framework 7 Features\u2014API Versioning<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/inside.java\/2025\/10\/22\/http3-support\/\" target=\"_blank\" rel=\"noopener\">HTTP\/3 Support in JDK 26<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/gradle.com\/blog\/develocity-intellij-plugin-speed-up-gradle-builds-insights\/\" target=\"_blank\" rel=\"noopener\">How to use the Develocity IntelliJ plugin to speed up Gradle builds with real-time insights<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/blog.frankel.ch\/transactions-threadlocal-spring\/\" target=\"_blank\" rel=\"noopener\">Transactions and ThreadLocals in Spring<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=N_b72RO2tG4\" target=\"_blank\" rel=\"noopener\">Spring Debugger: Behind The Scenes of Spring Boot by Marco Behler<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/spring.io\/blog\/2025\/10\/02\/a-bootiful-podcast-dr-kris-de-volder\" target=\"_blank\" rel=\"noopener\">A Bootiful Podcast: Dr. Kris De Volder on developer tooling for Spring developers and AI<\/a><\/li>\n\n\n\n<li><a href=\"Hibernate: Myths &amp; Over-Engineering. ORMs vs SQL vs Hexagonal \u2014 Gavin King&nbsp;\">Hibernate: Myths &amp; Over-Engineering. ORMs vs SQL vs Hexagonal \u2014 Gavin King | The Marco Show&nbsp;<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=t4h6l-HlMJ8\" target=\"_blank\" rel=\"noopener\">Hibernate vs Spring Data vs jOOQ: Understanding Java Persistence \u2013 Thorben Janssen | The Marco Show<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=lwF2fg1fOHk&amp;t=3s\" target=\"_blank\" rel=\"noopener\">Flyway: From Open Source Side Project to Multimillion Exit \u2013 Axel Fontaine | The Marco Show<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/poutsma-principles.com\/blog\/2025\/10\/23\/api-layers\/\" target=\"_blank\" rel=\"noopener\">Why Good APIs Are Like Ogres<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/blog.frankel.ch\/dependencies-objects\/\" target=\"_blank\" rel=\"noopener\">On dependencies in objects<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/hollycummins.com\/quarkus-ridiculous-things-voxxed-amsterdam\/\" target=\"_blank\" rel=\"noopener\">Six and a half ridiculous things to do with Quarkus<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/spring.io\/blog\/2025\/10\/09\/a-bootiful-podcast-josh-cummings\" target=\"_blank\" rel=\"noopener\">A Bootiful Podcast: Spring Security contributor Josh Cummings on the latest-and-greatest in Spring Security 7<\/a>&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/foojay.io\/today\/what-happens-when-10000-jvms-collaborate-in-one-production-environment\/\" target=\"_blank\" rel=\"noopener\">What Happens When 10,000 JVMs Collaborate in One Production Environment<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.woodruff.dev\/make-your-github-profile-update-itself-wordpress-posts-github-releases-linkedin-newsletters\/\" target=\"_blank\" rel=\"noopener\">Make Your GitHub Profile Update Itself (WordPress posts, GitHub releases, LinkedIn newsletters)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/spring.io\/blog\/2025\/10\/14\/spring-session-mongodb-new-leadership\" target=\"_blank\" rel=\"noopener\">Spring Session MongoDB: Now Led by MongoDB Team<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/patodev.pl\/posts\/junit6-suspend\/\" target=\"_blank\" rel=\"noopener\">Introducing JUnit 6: What\u2019s New and How to Test Kotlin Suspend Functions<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/foojay.io\/today\/working-with-geo-location-data\/\" target=\"_blank\" rel=\"noopener\">Working with Geo Location Data<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/foojay.io\/today\/keywords-meet-vectors-hybrid-search-on-mongodb\/\" target=\"_blank\" rel=\"noopener\">Keywords Meet Vectors: Hybrid Search on MongoDB<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.infoq.com\/podcasts\/cloud-devops-trends-2025\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">Cloud and DevOps InfoQ Trends Report 2025<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/glaforge.dev\/posts\/2025\/10\/25\/creating-a-javelit-chat-interface-for-langchain4j\/\" target=\"_blank\" rel=\"noopener\">Creating a Javelit chat interface for LangChain4j<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/blog.thecodewhisperer.com\/permalink\/going-further-with-one-outcome-per-test\" target=\"_blank\" rel=\"noopener\">Going Further With One Outcome per Test<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/blog.frankel.ch\/testing-untestable\/\" target=\"_blank\" rel=\"noopener\">Testing the untestable<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Conferences and Events<\/h2>\n\n\n\n<p>Plan your visits:<\/p>\n\n\n\n<ul>\n<li><a href=\"https:\/\/churconf.com\/\" target=\"_blank\" rel=\"noopener\">ChurConf<\/a> \u2013 Auckland, New Zealand, November 2<\/li>\n\n\n\n<li><a href=\"https:\/\/jax.de\/munich\/\" target=\"_blank\" rel=\"noopener\">W-Jax<\/a> \u2013 Online or Munich, Germany, November 3\u20137<\/li>\n\n\n\n<li><a href=\"https:\/\/oredev.org\/\" target=\"_blank\" rel=\"noopener\">\u00d8redev<\/a> \u2013 Malm\u00f6, Sweden, November 5\u20137<\/li>\n\n\n\n<li><a href=\"https:\/\/jfall.nl\/\" target=\"_blank\" rel=\"noopener\">JFall <\/a>\u2013 Path\u00e9 Ede, Netherlands, November 6<\/li>\n\n\n\n<li><a href=\"https:\/\/voxxeddays.com\/thessaloniki\/\" target=\"_blank\" rel=\"noopener\">Voxxed Days Thesalloniki <\/a>\u2013 Thesalloniki, Greece, November 7\u20138<\/li>\n\n\n\n<li><a href=\"https:\/\/javafest.org\/\" target=\"_blank\" rel=\"noopener\">JavaFest India<\/a> \u2013 Bengaluru, India, November 8<\/li>\n\n\n\n<li><a href=\"https:\/\/devoxx.ma\/\" target=\"_blank\" rel=\"noopener\">Devoxx Morocco<\/a> \u2013 Marrakech, Morocco, November 12\u201314<\/li>\n\n\n\n<li><a href=\"https:\/\/gradle.com\/events\/intellij-plugin-develocity-ai-troubleshooting-11-25\/\" target=\"_blank\" rel=\"noopener\">Using IntelliJ with Develocity AI for faster troubleshooting<\/a> \u2013 Online, November 13<\/li>\n\n\n\n<li><a href=\"https:\/\/www.java-users.jp\/\" target=\"_blank\" rel=\"noopener\">JJUG CCC Fall<\/a> \u2013 Tokyo, Japan, November 15<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Culture and Community<\/h2>\n\n\n\n<p>Let the articles below spark some inspiration and reflection:<\/p>\n\n\n\n<ul>\n<li><a href=\"https:\/\/www.infoq.com\/news\/2025\/10\/software-engineer-staff-plus\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">How Software Engineers Can Grow into Staff Plus Roles<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.infoq.com\/presentations\/team-diversity-productivity\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">Creating Impactful Teams Across Diverse Work Environments<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.infoq.com\/presentations\/strategic-discussions\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">How to Always Get Invited to Big Strategic Conversations<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.infoq.com\/news\/2025\/10\/software-engineering-governance\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">Why Software Engineering Governance Matters: Reducing Risk without Slowing down<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/jamesclear.com\/entropy\" target=\"_blank\" rel=\"noopener\">Entropy: Why Life Always Seems to Get More Complicated<\/a>&nbsp;&nbsp;<\/li>\n<\/ul>\n\n\n\n<p>That\u2019s it for today! We\u2019re always collecting ideas for the next Java Annotated Monthly \u2013 send us your suggestions via <a href=\"https:\/\/mail.google.com\/mail\/u\/0\/?fs=1&amp;tf=cm&amp;source=mailto&amp;to=JAM@jetbrains.com\" target=\"_blank\" rel=\"noopener\">email<\/a> or <a href=\"https:\/\/x.com\/intellijidea?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor\" target=\"_blank\">X<\/a> by November 20. Don\u2019t forget to check out our archive of <a href=\"https:\/\/www.jetbrains.com\/lp\/jam\/\" target=\"_blank\" rel=\"noopener\">past JAM issues<\/a> for any articles you might have missed!<\/p>\n","protected":false},"author":1138,"featured_media":655796,"comment_status":"closed","ping_status":"closed","template":"","categories":[89],"tags":[6847,3236,8647,21,76,276],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/idea\/655781"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/idea"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/types\/idea"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/users\/1138"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/comments?post=655781"}],"version-history":[{"count":9,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/idea\/655781\/revisions"}],"predecessor-version":[{"id":677555,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/idea\/655781\/revisions\/677555"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media\/655796"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media?parent=655781"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/categories?post=655781"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/tags?post=655781"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/cross-post-tag?post=655781"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}