3
我是Spring-World的新手,我有Spring安全和JPA的Spring Boot應用程序。也有CrudRepository和UserDetailsService中,見下文自動裝配到UserDetailsService的CrudRepository始終爲空
應用類
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
userDAO的
@Repository
public interface UserDao extends CrudRepository<User, Long> {
public Collection<User> findByName(String name);
}
ApiUserDetailsService
@Component
public class ApiUserDetailsService implements UserDetailsService {
@Autowired
private UserDao dao;
@Override
public UserDetails loadUserByUsername(final String username) throws UsernameNotFoundException {
assert dao != null;
...
}
}
安全配置
@Configuration
@EnableWebSecurity
public class HttpBasicAuthConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.requestCache().requestCache(new NullRequestCache());
http.httpBasic();
http.authorizeRequests().anyRequest().authenticated();
}
@Autowired
public void registerAuthentication(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(new ApiUserDetailsService());
}
}
爲什麼自動裝配Autowired道總是空?我做錯了什麼?
一個建議可能是您的組件沒有被掃描。 「@ComponentScan - 」可以指定定義特定的軟件包進行掃描,如果沒有定義特定的軟件包,將從包含該註釋的類的包中進行掃描「 – birya 2014-08-27 21:16:34
您正在使用'Spring Data' ?,您的UserDao是一個接口,同樣在你的registerAuthentication中你正在創建一個新的'ApiUserDetailsService',你需要自動裝配它! – 2014-08-27 21:48:45
[爲什麼我的Spring @Autowired字段爲空]?(http://stackoverflow.com/questions/19896870/why-is-my-spring-autowired-field-null) – chrylis 2014-08-27 23:28:37