Bem-vindo ao meu blog

Compartilhando conhecimento sobre tecnologia, programação e mais!

Scoped Values: Código Mais Limpo e Performance Melhor em Java

Publicado em: 02 de September de 2025 | Categorias: Java
Scoped Values: Código Mais Limpo e Performance Melhor em Java

O Java está evoluindo constantemente, e uma das funcionalidades que tem gerado bastante discussão na comunidade é o Scoped Values. Se você já trabalhou com aplicações multithread e sentiu a dor de cabeça de gerenciar dados compartilhados entre diferentes partes do código, essa feature pode ser exatamente o que estava esperando.

A Ideia Por Trás dos Scoped Values

A proposta dos Scoped Values é bem simples: criar uma maneira mais elegante e eficiente de compartilhar dados imutáveis entre diferentes camadas de uma aplicação, especialmente em cenários multithread. Essa feature é uma evolução do ThreadLocal, mas com algumas vantagens significativas.

A grande sacada é que você pode definir um valor em um ponto específico do seu código e ele ficará disponível para todos os métodos chamados dentro daquele escopo, sem precisar passar parâmetros manualmente por toda a cadeia de chamadas.

Quando Chega Oficialmente?

Esta nova feature JEP 506 está prevista para ser lançada junto com o Java 25, que deve estar disponível a partir do dia 16/09/2025

Exemplo Prático

Vamos ver como isso funciona na prática. Imagine que você tem uma aplicação web e precisa passar informações do usuário logado por várias camadas:

    
    public class ContextoUsuario {

        private static final ScopedValue<String> USUARIO_LOGADO = ScopedValue.newInstance();

        public static void executarComUsuario(String nomeUsuario, Runnable action) {
            ScopedValue.where(USUARIO_LOGADO, nomeUsuario).run(action);
        }

        public static String getUsuarioLogado() {
            return USUARIO_LOGADO.get();
        }
    }

    public class ServicePedido {
        public void processarPedido() {
            // Define o usuário no escopo
            ContextoUsuario.executarComUsuario("Felix Gilioli", () -> {
                criarPedido();
            });
        }

        private void criarPedido() {
            // Em qualquer lugar conseguimos o usuário sem passar parâmetro
            String usuario = ContextoUsuario.getUsuarioLogado();
            System.out.println("Pedido criado por: " + usuario);

            salvarNoBanco();
        }

        private void salvarNoBanco() {
            String usuario = ContextoUsuario.getUsuarioLogado();
            System.out.println("Salvando no banco para: " + usuario);
        }
    }
    

Por Que Isso Importa?

Os Scoped Values resolvem alguns problemas chatos que enfrentamos no dia a dia. Primeiro, eliminam aquela situação onde você precisa passar o mesmo parâmetro por cinco métodos diferentes só para chegar onde realmente precisa dele. Segundo, são thread-safe por design e trabalham muito bem com virtual threads, que são outra grande novidade do Java moderno.

A performance também é um ponto forte. Diferente do ThreadLocal, que pode causar vazamentos de memória se não for limpo adequadamente, os Scoped Values são automaticamente coletados pelo Garbage Collector quando saem de escopo.

Considerações Finais

Se você está desenvolvendo aplicações Java que lidam com múltiplas threads ou simplesmente quer um jeito mais limpo de compartilhar dados entre diferentes partes do seu código, vale muito a pena explorar os Scoped Values. Com a chegada do Java 25, essa feature promete ser uma adição valiosa ao arsenal de qualquer desenvolvedor Java.