Resolvendo o erro 'factoryBeanObjectType' no Spring Boot 3.2 com MyBatis Plus

Ao realizar a migração de projetos para o Spring Boot 3.2, desenvolvedores que utilizam o ecossistema MyBatis podem encontrar a seguinte exceção durante a inicialização do contexto da aplicação:

java.lang.IllegalArgumentException: Invalid value type for attribute 'factoryBeanObjectType': java.lang.String

Análise da Causa Raiz

O problema tem origem em uma mudança de comportamento no núcleo do Spring Framework, especificamente na classe FactoryBeanRegistrySupport. A partir da versão 3.2 do Spring Boot (que utiliza o Spring Framework 6.1), o método getTypeForFactoryBeanFromAttributes tornou-se mais rigoroso quanto aos metadados dos beans.

Anteriormente, o atributo factoryBeanObjectType aceitava uma String representando o nome da classe. No entanto, na nova versão, o Spring exige que esse valor seja do tipo ResolvableType ou Class. Versões mais antigas do mybatis-spring (como a 2.1.1, comumente carregada por versões anteriores do MyBatis Plus) ainda definem esse atributo como uma String dentro do método ClassPathMapperScanner#processBeanDefinitions, resultando na incompatibilidade.

Solução Recomendada

A forma mais eficiente de resolver este erro é atualizar o starter do MyBatis Plus para uma versão que ofereça suporte nativo ao Spring Boot 3.2. A equipe do MyBatis Plus lançou um artefato específico para o Spring Boot 3 que corrige essa dependência transitória.

No seu arquivo pom.xml, substitua o starter antigo pela nova versão:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
    <version>3.5.5</version>
</dependency>

Nota: É importante observar a mudança no artifactId de mybatis-plus-boot-starter para mybatis-plus-spring-boot3-starter.

Solução Alternativa: Ajuste de Dependência Manual

Caso não seja possível atualizar o starter completo no momento, você pode forçar a atualização da biblioteca mybatis-spring para a versão 3.0.3 ou superior, que contém a correção necessária para o Spring Boot 3.2. Para isso, utilize exclusões no Maven:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.4.1</version>
    <exclusions>
        <exclusion>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>3.0.3</version>
</dependency>

Após aplicar uma das alterações acima, limpe o cache do seu gerenciador de dependências e reinicie a aplicação. O erro de validação do atributo de fábrica não deve mais ocorrer, permitindo que o scanner de mappers do MyBatis processe as interfaces corretamente sob o Spring Boot 3.2.

Tags: spring-boot MyBatis java Spring-Framework maven

Publicado em 6-3 17:27 por Thomas