0

更新しました

疑わしいログ エントリを見つけました。

org.springframework.beans.factory.wiring.BeanConfigurerSupport:

BeanFactory has not been set on BeanConfigurerSupport: Make sure this configurer runs  in a Spring container. 
Unable to configure bean of type [com.mycompany.projectname.App]. Proceeding without injection.

/更新しました

私は Vaadin + Spring アプリケーションに取り組んでおり、JavaConfig を使用したいと考えています。

いくつかのチュートリアルに従って、それらを個別に構築しましたが、それらをマージすると、次のようになりました(最初のcodesnipet App.java - logger.info(">>mainWindow is null");を参照)

app postconstruct --------- 
mainWindow is null

たとえば、applicationContextなどで、構成のいくつかのバリエーションを試しました。

だから私の質問は:どうすれば本当の問題を見つけることができますか?

事前にお時間と労力をいただきありがとうございます。

チャバ

App.java

@Configurable
public class App extends Application
{
    public MainWindow mainWindow;    
    public MainWindow getMainWindow(...
    public void setMainWindow(Main....


    @PostConstruct
    public void init()
    {
        logger.info(">>app postconstruct --------- ");
        if(mainWindow==null) logger.info(">>mainWindow is null");
        else logger.info(">>mainWindow is not null");
    }

AppConfig.java

    @Configuration
    public class AppConfig {
    ...
    @Bean
    public MainWindow mainWindow(){
            return new MainWindow();
    }
    ....    
    }

この!tutorial リンクに基づく web.xml !

...
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.mycompany.projectname.config.AppConfig</param-value>
</context-param>  
...

<servlet>
    <servlet-name>Vaadin Application Servlet</servlet-name>
    <servlet-class>com.vaadin.terminal.gwt.server.ApplicationServlet</servlet-class>

    <init-param>
    <description>Vaadin application class to start</description>
    <param-name>application</param-name>
    <param-value>com.mycompany.projectname.App</param-value>
    </init-param>

    <init-param>
    <param-name>contextClass</param-name>
    <param-value>
    org.springframework.web.context.support.AnnotationConfigWebApplicationContext
    </param-value>
    </init-param>

    <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>com.mycompany.projectname.config.AppConfig</param-value>
    </init-param>    
</servlet>
4

2 に答える 2

2

@Configurable を使用している理由は何ですか? 代わりに @Component を使用するということですか?

@Configurable は通常、Spring コンテナーから依存性注入を受け取ることができるようにするために、Spring 管理オブジェクトではないドメイン オブジェクト (エンティティーとも呼ばれます) で使用されます。これはあなたの目標ではないようです。おそらく、「App」クラスを別の @Bean メソッドとして配線するか、@Component でマークしてコンポーネントスキャン (@ComponentScan など) で取得する必要があります。詳細については、これらの注釈に関連する Javadoc とリファレンス ドキュメントを確認してください。

于 2011-09-27T02:48:25.810 に答える
1

アノテーションを有効にしないと、アノテーションは機能しません。

プロジェクトの spring context xml に次のものがありますか?

<!-- Activate Spring annotation support -->
<context:spring-configured/>

<!-- Turn on @Autowired, @PostConstruct etc support -->
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />

<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />

<!-- Scans the classpath of this application for @Components to deploy as beans -->
<context:component-scan base-package="com.tc.poc.vaddinspring" />

更新:このスケルトンを見てください。

于 2011-09-29T14:44:31.743 に答える