Spring 用@Named 设置bean 名称
Spring set bean name with @Named
我使用 javax 标准注释 @Named
在 spring4 中定义 bean。要设置 bean 名称,我可以尝试 @Named("MyBean")
但它没有更改 bean 名称。
我使用了 spring Component
注释 @Component("MyBean")
并且效果很好。
是否可以使用@Named
设置bean名称
bean定义为L
@Named("myBean") //This not
@Component("myBean") //This works
@Scope("session")
public class User implements HttpSessionBindingListener, Serializable {
application.context
是
<context:component-scan base-package="foo.bar" />
我同意@fabian 所说的。您可以使用 @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);
}
}
我使用 javax 标准注释 @Named
在 spring4 中定义 bean。要设置 bean 名称,我可以尝试 @Named("MyBean")
但它没有更改 bean 名称。
我使用了 spring Component
注释 @Component("MyBean")
并且效果很好。
是否可以使用@Named
bean定义为L
@Named("myBean") //This not
@Component("myBean") //This works
@Scope("session")
public class User implements HttpSessionBindingListener, Serializable {
application.context
是
<context:component-scan base-package="foo.bar" />
我同意@fabian 所说的。您可以使用 @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);
}
}