【问题标题】:Spring set bean name with @NamedSpring 使用 @Named 设置 bean 名称
【发布时间】:2016-04-04 15:43:08
【问题描述】:

我使用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" />

【问题讨论】:

  • 是的,有可能。您能否提供有关您的问题的更多信息(如 applicationContext.xml,如果有)?也许这是另一个问题。
  • 请看我的更新

标签: spring dependency-injection javabeans


【解决方案1】:

我同意@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);
    }

}

【讨论】:

  • 谢谢,但您使用了@Autowired 注释而不是@Inject。是否测试过它也可以与@inject 一起使用?!
  • 我在测试类中用@Inject 尝试了代码。效果很好。
  • 虽然它仍然不能与我的会话范围对象一起工作,但代码似乎应该可以工作,我会尝试更多,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-04
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多