spring - 将参数传递给注入的对象

时间:2017-06-12 17:49:47

标签: java spring-boot dependency-injection

我正在尝试将一个bean注入一个Controller,但看起来Spring没有使用bean.xml文件。

以下是代码:

控制器

btnNewButton.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e)
      {
        // Code to execute when clicked
      }
    });

要注入的对象的接口

@RestController
public class AppController {

  private final EventService eventService;
  private List<String> categories;

  public AppController(final EventService eventService) {
    this.eventService = eventService;
  }
}

其实施

public interface EventService {
   // some methods
}

如果我使用@Service注释MyEventService,Spring会尝试将其注入Controller,但会抱怨没有提供baseURL(没有类型'java.lang.String'的限定bean可用)。所以我在src / main / resources

下创建了一个bean.xml文件
public class MyEventService {

  private final String baseURL;

  public MyEventService(String baseURL){
    this.baseURL = baseURL;
  }
}

但这似乎不起作用,就好像我从MyEventService中删除了@Service抱怨没有为eventService找到一个bean。

我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

Spring Boot严重依赖于Java Config。

检查the docs如何声明@Component,@ Service等

在你的情况下:

@Service
public class MyEventService implements EventService {

  private final String baseURL;

  @Autowired
  public MyEventService(Environment env){
    this.baseURL = env.getProperty("baseURL");
  }
}

在/src/main/resources/application.properties

baseURL=https://baseUrl

然后

@RestController
public class AppController {

  private final EventService eventService;

  @Autowired
  public AppController(final EventService eventService) {
    this.eventService = eventService;
  }
}

@Autowired将告诉Spring Boot查看使用@ Component,@ Service,@ Repository,@ Controller等声明的组件

为了注入类别,我真的建议你声明一个CategoriesService(带有@Service)从配置文件中获取类别,或者只是在CategoriesService类中对它们进行硬编码(用于原型设计)。

答案 1 :(得分:0)

您正在尝试的内容有两个问题

  1. 没有选择xml bean定义的原因是因为你没有在你的控制器中注入服务,因为你正在为你的控制器使用注释,你需要告诉控制器服务需要如何注入,修复此问题只需自动启动您的服务

    valid: function() {
      let inputs = this.$el.querySelectorAll('input');
      for (let i = 0; i < inputs.length; i++) {
        if (this[inputs[i].name] == '') {
          return false;
        }
      }
      return true;
    }
    
  2. 当您对基于构造arg的spring bean使用注释时,您还需要设置值,就像在xml中一样。

    @RestController
    public class AppController {
    
    @Autowired
    private final EventService eventService;
    
    
    }