2

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

@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;
  }
}

我想defaultPassword使用 Spring XML 配置而不是通过注释来配置值,所以我在 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 注入?我搜索了文档,但没有找到像这样的“混合”方法的解释。

4

1 回答 1

4

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

你最终会在userServiceImpl这里调用一个单例。

于 2012-08-28T08:17:27.147 回答