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