java - spring-config.xml 中第三方库的 Bean

标签 java spring

我有一个如下所示的类(class)

@Component
public class BillDAO {

    private DynamoDBMapper dynamoDBMapper;

    public void create(BillDO billDO) {
        AmazonDynamoDBClientBuilder builder = AmazonDynamoDBClientBuilder.standard().withRegion(Regions.AP_SOUTH_1);
        DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(builder.build());
        dynamoDBMapper.save(billDO);
    }
}

基本上,我不想每次调用 create 方法时都构造 dynamoDBMapper 和构建器实例。更喜欢将它们作为 bean 注入(inject)。可以做什么?

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.tarkshala" />
</beans>

我确实找到了一些将构造函数参数用于bean和工厂方法的示例。不知道如何在这里使用它。

最佳答案

您应该能够使用 @Configuration 注释来执行此操作。以下是 @Configuration 实现的代码示例,用于创建 AmazonDynamoDBClientBuilder 和 DynamoDBMapper 作为 Spring bean 类。

package com.tarkshala;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ConfigurationAnnotationExample {

    @Bean
    public AmazonDynamoDBClientBuilder getAmazonDynamoDBClientBuilder() {
        return AmazonDynamoDBClientBuilder.standard().withRegion(Regions.AP_SOUTH_1);
    }

    @Bean
    public DynamoDBMapper getDynamoDBMapper(final AmazonDynamoDBClientBuilder builder) {
        return new DynamoDBMapper(builder.build());
    }
}

这是您修改后的 BillDAO,以使用注入(inject)的 DynamoDBMapper。

package com.tarkshala;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class BillDAO {

    private DynamoDBMapper dynamoDBMapper;

    @Autowired
    public BillDAO(final DynamoDBMapper dynamoDBMapper) {
        this.dynamoDBMapper = dynamoDBMapper;
    }

    public void create(BillDO billDO) {
        dynamoDBMapper.save(billDO);
    }
}

由于您已经添加了 <context:component-scan base-package="com.tarkshala"/> 在您的应用程序上下文 xml 中,无需再从 ConfigurationAnnotationExample 类创建 bean。

关于java - spring-config.xml 中第三方库的 Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50145190/

相关文章:

java - 有关 Keystore 使用的基本问题

Java - Tomcat : Reload context. xml 无需重启服务器

java - @SuppressWarnings ("unchecked") 在 dao 类中

java - UnexpectedRollbackException - 完整的场景分析

java - 如何在 Play 框架的索引页面上加载示例 html 页面?

java - 我已经重写了paintComponent(),那么为什么我的形状没有出现呢?

java - 从 Alfresco 集成测试上下文访问 Spring bean

java - 使用 Stanford CoreNLP 情绪分析时输出不正确

java - JPA 对象引用未保存的 transient 实例 - 在刷新之前保存 transient 实例

java - 对于具有纯 Java 配置的 Spring Web 应用程序,拥有 2 个不同的上下文有意义吗?