在一个实例bean上使用注释和XML配置

时间:2012-08-28 07:53:25

标签: java spring

我正在使用注释创建服务:

@Service
@Repository
public class UserServiceImpl implements UserService {
  private String defaultPassword;

  @Autowired
  private UserRepository userRepository;

  // ...

  @Override
  public void setDefaultPassword(String defaultPassword) {
     this.defaultPassword = defaultPassword;
  }

  @Override
  public String getDefaultPassword() {
     return defaultPassword;
  }
}

我想使用Spring XML配置而不是通过注释来配置defaultPassword值,所以我在XML定义中添加了以下内容:

<bean id="userServiceImpl" class="com.test.service.UserServiceImpl">
   <property name="defaultPassword" value="youmustchangethis" />
</bean>

然后,我写下测试:

public class UserServiceImplTest extends AbstractServiceImplTest {

  @Autowired
  private UserService userService;

  // ...
}

我在注释和XML声明中使用bean名称(使用bean id)。我的问题是userService中的UserServiceImplTest变量是否总是由在XML和注释中配置的相同单例bean注入?我已经搜索了文档,但没有找到&hybrid;&#39; hybrid&#39;像这样的方法。

1 个答案:

答案 0 :(得分:4)

在这种情况下,在xml文件中定义的bean将覆盖从注释生成的bean。这是因为spring命名注释bean基于类名,第一个字母变为小写。除非你给它一个explit名称。不能存在两个同名的bean,因此xml定义会覆盖注释1。

你最终会在这里找到一个名为userServiceImpl的单身人士。