2016-04-04 9 views
1

spring4でBeanを定義するには、javax標準アノテーション@Namedを使用します。 Bean名を設定するには、私が試してみた@Named("MyBean")しかし、Bean名は変更されませんでした。@Namedを持つスプリングセットBean名

私はスプリングComponent注釈@Component("MyBean")を使用しましたが、正常に動作しました。

はそれが@Named

に豆を使用してBean名を設定することは可能です

@Named("myBean") //This not 
@Component("myBean") //This works 
@Scope("session") 
public class User implements HttpSessionBindingListener, Serializable { 

ASLを定義しているapplication.contextは私が@fabianが言ったことに同意し

<context:component-scan base-package="foo.bar" /> 
+1

はい、それは可能です。あなたの問題に関する詳細情報(applicationContext.xmlがあれば)を提供してください。たぶんもう一つの問題でした。 –

+0

私のアップデート –

答えて

2

です。 @Namedアノテーションを使用してBean名を設定できます。 Bean名が一致しない場合、タイプ別に自動配線に戻ります。

私はいくつかの例を試しました。彼らは私のために働いた。

AppConfig.java

package com.named; 

import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 

@Configuration 
@ComponentScan 
public class AppConfig { 

} 

NamedService.java

package com.named; 

import javax.inject.Named; 

@Named("namedTestDependency") 
public class NamedService { 

    public void namedMethod(){ 
     System.out.println("Named method"); 
    } 

} 

NamedServiceTest.java

package com.named; 

import static org.junit.Assert.assertNotNull; 

import com.named.AppConfig; 
import com.named.NamedService; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes=AppConfig.class) 
public class NamedServiceTest { 

    //Matched by name of dependency 
    @Autowired 
    private NamedService namedTestDependency; 

    //Falls back to auto-wiring by type 
    @Autowired 
    private NamedService noDeclaration; 

    @Test 
    public void testAutowiring(){ 
     assertNotNull(namedTestDependency); 
     assertNotNull(noDeclaration); 
    } 

} 
+0

ありがとうございますが、あなたは '@ Inject'ではなく' @ Autowired'アノテーションを使っています。 '@ inject'でも動作することをテストしましたか? –

+0

私はそれを試してみましょう。 – asg

+0

テストクラスで@Injectでコードを試しました。それは正常に働いた。 – asg

関連する問題