当前位置: 首页 > 知识库问答 >
问题:

使用配置类时的Spring自动布线

邰博远
2023-03-14

我有一个 xml 豆文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">
   <context:annotation-config/>
   <bean id="helloWorld" class="com.a.b.HelloWorld"> 
         <property name="attr1" value="Attr1 from XML"></property>
   </bean>
    <bean id="helloWorld2" class="com.a.b.HelloWorld2">
        <property name="attr2" value="Attr2 from XML"></property>
    </bean>
</beans>

我有像这样使用构造函数自动装配

public class HelloWorld2{
       private String attr2;
       public void setAttr2(String message){
          this.attr2  = message;
       }

       public void getAttr2(){
          System.out.println("getAttr2 == " + attr2);
       }


    }

public class HelloWorld{
       private String attr1;
       private HelloWorld2 helloWorld2;    
       public HelloWorld(){

       }
       @Autowired
       public HelloWorld(HelloWorld2 helloWorld2){
           System.out.println("hhh");
           this.helloWorld2 = helloWorld2;
       }


    public void setAttr1(String message){
          this.attr1  = message;
       }

       public void getAttr1(){
          System.out.println("getAttr1 == " + attr1);
       }
       public void getH(){
           helloWorld2.getAttr2();
       }
    }

自动布线工作正常。

现在我想把我的beans移到配置类中。但是如何移动代码以使自动布线工作呢?

我已经试过了,但是不起作用

@Configuration
public class Config {
    @Bean
    public HelloWorld helloWorld(){
        HelloWorld a = new HelloWorld();
        a.setAttr1("Demo Attr1");
        return a;

    }

    @Bean
    public HelloWorld2 helloWorld2(){
        HelloWorld2 a = new HelloWorld2();
        a.setAttr2("Demo Attr2");
        return a;               
    }
}

共有1个答案

陈马鲁
2023-03-14

我认为您想要实现的是将< code>HelloWorld2实例注入到创建< code > hello world < code > @ Bean 的方法中?

这应该可以做到:

@Configuration
public class Config {
    @Bean
    public HelloWorld helloWorld(HelloWorld2 helloWorld2){
        HelloWorld a = new HelloWorld(helloWorld2);
        a.setAttr1("Demo Attr1");
        return a;

    }

    @Bean
    public HelloWorld2 helloWorld2(){
        HelloWorld2 a = new HelloWorld2();
        a.setAttr2("Demo Attr2");
        return a;               
    }
}

这可能是这些问题的重复:

  • 了解Spring自动连接的用法。
  • 将Spring.XML文件转换为Spring配置类
 类似资料:
  • 问题内容: 我正在阅读Pro Spring3这本书。它有一段确实让我感到困惑。该段是关于春季自动装配的。这是节选: 在大多数情况下,是否应该使用自动装配的问题的答案肯定是“不!”。自动装配可以在小型应用程序中节省时间,但在许多情况下,这会导致不良做法,并且在大型应用程序中不灵活。使用byName似乎是个好主意,但它可能会导致您为类提供人为的属性名称,以便可以利用自动装配功能。Spring的整个想法

  • 我正在开发一个具有可重用逻辑的公共java库,以与一些AWS服务交互,这些服务将依次被多个消费者应用程序使用。出于这里概述的原因,以及Spring Boot似乎为SQS集成之类的东西提供了大量无模板代码的事实,我决定将此公共库实现为具有自动配置的定制Spring Boot启动器。 我也是Spring框架的新手,因此遇到了一个问题,即我的自动配置类的实例变量没有通过AutoWired注释进行初始化。

  • 我正在开发一个数据访问库,并希望能够以最少的配置将其作为依赖项包含在其他项目中(理想情况下只是自动连接存储库)。特别是,这个库使用自动配置类(在中启用)进行设置,并且需要禁用其他自动配置类才能工作(和)。 是否可以在从属项目之外执行此操作? 为了使配置尽可能简单,我希望避免将排除项放在依赖项目的注释或其属性中。 更新: 在我的@Configuration上,我尝试添加注释: 这导致了 Illega

  • 我有一个很小的Spring Boot应用程序(这只是一个概念证明),它运行在H2内存数据库上,并使用spring-data-jpa来处理持久性。它由一个允许处理帖子和评论的REST API组成,因此您可以创建和检索帖子以及对那些帖子的评论。应用程序有两个JPA实体和,我面临的问题是,在添加实体之后,应用程序无法启动,但是在添加之前,当我刚刚拥有实体时,应用程序已经启动并通过了测试。看来spring

  • 我尝试了一切,但我似乎无法禁用Spring启动2.1.10中的Spring安全自动配置--我认为自动配置似乎是由执行器触发的,但我试图排除几乎所有可能的类,但似乎仍然引入了过滤链。当我通过属性文件进行配置时,它短暂地工作了一下,但又停止了工作。 我试过了

  • 基本上,我想问的是:将Spring Boot自动配置的bean自动导入XML配置文件的等价物是什么? 下面是我的主要Spring Boot入口点,它只是所有文档中列出的标准类: 我主要在一个Spring集成应用程序中使用它,在这个应用程序中Java配置还没有得到很好的支持,框架的核心是基于XML配置的,但是我希望在一些集成元素中使用Spring Boot自动配置的和bean。 https://gi