Java 将SpringXML配置更改为@configuration

Java 将SpringXML配置更改为@configuration,java,spring,Java,Spring,我的spring应用程序已经通过xml stye进行了配置。我正在尝试使用@Configuration类对其进行更改 我的应用程序被另一个项目用作maven库。我有一个服务,用@Named注释,该服务被库中的另一个服务使用 @Named("userDetailsService") public class UserDetailsServiceImpl extends AbstractServiceImpl implements UserDetailsService { @Inject priv

我的spring应用程序已经通过xml stye进行了配置。我正在尝试使用@Configuration类对其进行更改

我的应用程序被另一个项目用作maven库。我有一个服务,用@Named注释,该服务被库中的另一个服务使用

@Named("userDetailsService")
public class UserDetailsServiceImpl extends AbstractServiceImpl implements UserDetailsService {

@Inject
private UserService userService;

@Override
@Transactional
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

    return userService.getByUserName(username);
 }
}



@Named("userService")
public class UserServiceImpl extends BaseDaoServiceImpl<User, UserDao> implements UserService {

@Inject
private AuthorityService authorityService;

@Inject
private UserAuthorityService userAuthorityService;

@Override
@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
public User getByUserName(String username) {

    return dao.getByUserName(username);
}

@Override
public List<User> getUserWithHasAuthority(String authorityName) {
    return dao.getUserWithHasAuthority(authorityName);
}

@Override
@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
public User insert(User user) {

    user.setEnabled(true);
    super.insert(user);

    Authority authority = authorityService.getByName("ROLE_USER");

    UserAuthority userAuthority = new UserAuthority();
    userAuthority.setAuthority(authority);
    userAuthority.setUser(user);
    userAuthorityService.insert(userAuthority);

    return user;
 }
}
这是我的测试方法:

@Test
public void test() {
    UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken("admin", "admin");
    authenticationManager.authenticate(authenticationToken);
}
它在userDetailsService中存在的userService属性上提供空指针异常。它们都是@Named

谢谢你的帮助

测试类别:

@ContextConfiguration(classes = {ServiceTestConfiguration.class, DataSourceConfiguration.class, SecurityConfiguration.class})
@Transactional
public class AbstractTest {
}


@RunWith(SpringJUnit4ClassRunner.class)
public class ServiceTest extends AbstractTest {

@Inject
private AuthenticationManager authenticationManager;

@Test
public void test() {
    UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken("admin", "admin");
    authenticationManager.authenticate(authenticationToken);
 }
}

你能分享一下测试类的配置吗?我编辑了问题,我看不出你的配置有任何错误,或者我的意思是我没有任何错误,我只是建议在你的测试中更好地组织类,但这不是一个重要的问题,可能错误在你的spring安全配置中是的,你是对的。我在安全性方面有一个错误配置。我没有注入UserDetailsService,而是将其放在AuthenticationManagerBuilder上,并使用新的Constr.:)真想不到你帮了忙
@ContextConfiguration(classes = {ServiceTestConfiguration.class, DataSourceConfiguration.class, SecurityConfiguration.class})
@Transactional
public class AbstractTest {
}


@RunWith(SpringJUnit4ClassRunner.class)
public class ServiceTest extends AbstractTest {

@Inject
private AuthenticationManager authenticationManager;

@Test
public void test() {
    UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken("admin", "admin");
    authenticationManager.authenticate(authenticationToken);
 }
}