2016-04-04 10 views
1

Ich verwende javax Standard Annotation @Named für die Definition von Bohnen in Spring4. Um den Bean-Namen zu setzen, konnte ich versuchen @Named("MyBean"), aber es änderte nicht den Bean-Namen.Spring set Bean Name mit @Named

Ich benutzte Feder Component Annotation @Component("MyBean") und es hat gut funktioniert.

Ist es möglich, die Bohnen Namen zu setzen, indem @Named

mit der Bohne definiert ist asl

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

Die application.context ist

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

Ja, es ist möglich. Können Sie bitte weitere Informationen zu Ihrem Problem bereitstellen (wie die applicationContext.xml, falls vorhanden)? Vielleicht war es ein anderes Problem. –

+0

Bitte sehen Sie mein Update –

Antwort

2

Ich bin damit einverstanden, in welchem ​​@fabian gesagt hat. Sie können @named Annotation verwenden, um den Bean-Namen festzulegen. Wenn der Bean-Name nicht übereinstimmt, wird automatisch nach Art der Verdrahtung gesucht.

Ich habe ein paar Beispiele ausprobiert. Sie haben für mich gearbeitet.

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

Danke, aber Sie haben '@ Autowired' Annotation anstelle von' @ Inject' verwendet. Habe getestet, dass es auch mit '@ inject' funktioniert ?! –

+0

Lass mich das versuchen. – asg

+0

Ich habe den Code mit @Inject in der Testklasse ausprobiert. Es hat gut funktioniert. – asg