首页 > 解决方案 > spring-config.xml 中第三方库的 Bean

问题描述

我有一个如下所示的课程

@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 和 builder 实例。宁愿将这些作为 bean 注入。可以做什么?

<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 和工厂方法的示例。不知道如何在这里使用它。

标签: javaspring

解决方案


您应该能够使用@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 以使用注入的 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。


推荐阅读