2017-06-12 16 views
1

Beanをコントローラに挿入しようとしていますが、Springがbean.xmlファイルを使用していないように見えます。注入オブジェクトへのスプリングパスパラメータ

コントローラ

@RestController 
public class AppController { 

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

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

IはMyEveに注釈を付ける場合、その実装

public class MyEventService { 

    private final String baseURL; 

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

public interface EventService { 
    // some methods 
} 

を注入するオブジェクトのインタフェース:ここ

コードであります@Serviceを持つntService Springはコントローラにそれを注入しようとしますが、提供されていないbaseURLについて文句を言います( 'java.lang.String'タイプの適格なBeanはありません)。だから私は、SRC /メイン/リソース

<?xml version = "1.0" encoding = "UTF-8"?> 

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

    <bean id="eventService" class="xyz.MyEventService"> 
     <constructor-arg type="java.lang.String" value="fslkjgjbflgkj" /> 
    </bean> 

    <bean id="categories" class="java.util.ArrayList"> 
     <constructor-arg> 
      <list> 
       <value>music</value> 
       <value>comedy</value> 
       <value>food</value> 
      </list> 
     </constructor-arg> 
    </bean> 
    </beans> 

下bean.xmlファイルを作成したが、それはのEventServiceのための豆を見つけることではない文句私はMyEventService春から@Serviceを削除するかのように動作するようには思えません。

何か不足していますか?

答えて

0

スプリングブートはJava Configに大きく依存します。 @Serviceなど@Componentを宣言する方法について

チェックthe docs、あなたの場合は

@Service 
public class MyEventService implements EventService { 

    private final String baseURL; 

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

そして、あなたに

baseURL=https://baseUrl 
を/src/main/resources/application.properties

そして次に

​​

@Autowiredは@Component、@Service、@Repository、@Controllerなどで宣言したコンポーネントを表示するようSpringブートに指示します

カテゴリを挿入するには、CategoriesService(@Service)設定ファイルからカテゴリを取得するか、CategoriesServiceクラス(プロトタイプ用)でハードコードするだけです。

0

あなたがあなたのために、アノテーションを使用しているので、あなたは、あなたのコントローラでサービスを注射していなかったので、あなたのXML Bean定義をピックアップされていない理由がある

  1. をしようとしているものとの2つの問題があります。あなたは、構文、引数に基づく春のBeanのアノテーションを使用している場合は、あなたが同様に値を設定する必要がありますちょうどあなたのサービスをautowire

    @RestController 
    public class AppController { 
    
    @Autowired 
    private final EventService eventService; 
    
    
    } 
    
  2. この問題を解決するために、サービスを注射する必要がどのようにコントローラを説明しておく必要があり、コントローラ、あなたがやっているようにあなたのXMLで。

    public class MyEventService { 
    
    private final String baseURL; 
    
    public MyEventService(@Value("#{your value here")String baseURL){ 
        this.baseURL = baseURL; 
    } 
    } 
    
+0

私はすでにAutowiredで試してみたが、春には、それはのEventServiceための豆を見つけることができないと言います。私がそれを(ほとんど)働かせる唯一の方法は、MyEventServiceにServiceを注釈することです:その場合、問題はbaseURLです。以前のプロジェクトでは、すべてのBeanがxmlファイルに定義されていましたが、注釈はなく、うまくいきました。 – algiogia

関連する問題