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



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

@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)。我的问题是UserServiceImplTest中的userService变量是否总是由XML和注释中配置的同一个单例bean注入?我搜索了文档,但没有找到像这样的"混合"方法的解释。

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

在这里,您将得到一个名为userServiceImpl的单例。

最新更新