qq_58822056 2023-10-10 09:33 采纳率: 50%
浏览 7

bean依赖注入问题

public class PostProcessorTest {
    public static void main(String[] args) {
        DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
        AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition(Config.class).setScope("singleton").getBeanDefinition();
        beanFactory.registerBeanDefinition(Config.class.getName(),beanDefinition);
        for (String beanDefinitionName : beanFactory.getBeanDefinitionNames()) {
            System.out.println(beanDefinitionName);
        }

        Config beforeBean = beanFactory.getBean(Config.class);
        System.out.println(beforeBean);
        System.out.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
        AnnotationConfigUtils.registerAnnotationConfigProcessors(beanFactory);
        for (BeanFactoryPostProcessor postProcessor : beanFactory.getBeansOfType(BeanFactoryPostProcessor.class).values()) {
            System.out.println("--------->BeanFactoryPostProcessor:"+postProcessor);
            postProcessor.postProcessBeanFactory(beanFactory);
        }

        for (String beanDefinitionName : beanFactory.getBeanDefinitionNames()) {
            System.out.println(beanDefinitionName);
        }

        Config createBean = beanFactory.getBean(Config.class);
        System.out.println(createBean);

        System.out.println("-------------------");
        for (BeanPostProcessor postProcessor: beanFactory.getBeansOfType(BeanPostProcessor.class).values()) {
            System.out.println("------------>BeanPostProcessor:"+postProcessor);
            beanFactory.addBeanPostProcessor(postProcessor);
        }

        System.out.println(">>>>>>>>>>>>>>>>>>>");
        for (String beanDefinitionName : beanFactory.getBeanDefinitionNames()) {
            System.out.println(beanDefinitionName);
        }
        System.out.println(">>>>>>>>>>>>>>>>>>>");
//        beanFactory.preInstantiateSingletons();
//        System.out.println(beanFactory.getBean(ComponentOne.class));
        Config afterBean = beanFactory.getBean(Config.class);
        System.out.println("]]]]]]]]]]]]]]]]");
        System.out.println(afterBean);
    }
@Configuration
@Data
@ToString
public class Config  {

    @Resource
    private ComponentOne componentOne;

    @Resource
    private ComponentTwo componentTwo;

    @Bean
    public ComponentOne componentOne(){
        return new ComponentOne();
    }
    @Bean
    public ComponentTwo componentTwo(){
        return new ComponentTwo();
    }

}

我想提问的是为什么Config为什么没有依赖注入?是什么原因造成的

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-10 13:56
    关注

    【以下回答由 GPT 生成】

    解决方案:

    在C++中,实现bean依赖注入可以有多种方法。下面是一个可能的解决方案:

    1. 首先,你需要创建一个Bean容器,用于管理各个bean的创建和依赖关系。你可以使用一个简单的类作为容器,如下所示:
    #include <iostream>
    #include <memory>
    #include <unordered_map>
    
    class BeanContainer {
    public:
        template<typename T, typename... Args>
        void registerBean(const std::string& name, Args&&... args) {
            beans_[name] = std::make_shared<T>(std::forward<Args>(args)...);
        }
    
        template<typename T>
        std::shared_ptr<T> getBean(const std::string& name) {
            if (beans_.find(name) != beans_.end()) {
                return std::dynamic_pointer_cast<T>(beans_[name]);
            }
            return nullptr;
        }
    
    private:
        std::unordered_map<std::string, std::shared_ptr<void>> beans_;
    };
    

    这个简单的Bean容器允许你注册和获取各个bean,并且能够处理不同类型的bean。

    1. main()函数中,你需要对Bean容器进行配置并注册你的Config类。你可以像下面这样进行配置:
    int main() {
        BeanContainer beanContainer;
    
        // 注册Config类
        beanContainer.registerBean<Config>("config");
    
        // Other code related to bean dependency injection
    
        return 0;
    }
    
    1. 现在,你可以在其他部分的代码中使用Bean容器来获取Config的实例。例如,你可以在其他类的构造函数中使用依赖注入的方式获取Config的实例:
    class MyClass {
    public:
        MyClass(std::shared_ptr<Config> config) : config_(config) {}
    
        // Other methods
    
    private:
        std::shared_ptr<Config> config_;
    };
    
    1. 在需要使用Config的地方,你可以通过Bean容器来获取实例。例如:
    std::shared_ptr<Config> config = beanContainer.getBean<Config>("config");
    if (config) {
        MyClass myClass(config);
        // 使用myClass对象
    } else {
        // 处理配置没有找到的情况
    }
    

    这样,你就可以在其他部分的代码中使用依赖注入的方式,成功获取Config的实例。

    希望以上解决方案对你有帮助。如果在实际实施过程中遇到其他问题,请随时提问。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月10日

悬赏问题

  • ¥100 请问我基于逐飞库写的这个有关于mp u6050传感器的函数,为什么输出的值是固定的?
  • ¥15 hadoop中启动hive报错如下怎么解决
  • ¥15 如何优化QWebEngineView 加载url的速度
  • ¥15 关于#hadoop#的问题,请各位专家解答!
  • ¥15 如何批量抓取网站信息
  • ¥15 Spring Boot离线人脸识别
  • ¥15 NRF24L01能发送但是不能接收
  • ¥15 想问一下这种情况怎么解决呢(关键词-file)
  • ¥15 python Flassk 模块部署 服务器时报错
  • ¥15 Opencv(C++)异常