我正在尝试将一个服务注释类注入Spring Boot应用程序中的配置类,但它没有被注入(设置为null),我认为这是由于Spring生命周期.
此外,这个服务有一个使用构造函数注入的重载构造函数,我想这也是一个问题,因为自动装配作用于默认构造函数.但是,该服务需要进行Spring配置,因此我不认为可以在Bean注释方法中创建新实例.
怎么解决这个问题?
@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private SessionService sessionService;
@Bean
public SessionService sessionService() {
return sessionService;
}
}
public interface SessionService extends BaseCacheService<Session> {
void extendExpiration(String key);
String getSessionId(String key);
}
@Service
public class SessionServiceImpl implements SessionService {
private Environment environment;
private UserService userService;
@Autowired
public SessionServiceImpl(Environment environment, UserService userService) {
this.environment = environment;
this.userService = userService;
}
}
Run Code Online (Sandbox Code Playgroud)
您的错误如下(您返回一个空值):
@Bean
public SessionService sessionService() {
return sessionService;
}
Run Code Online (Sandbox Code Playgroud)
解
由于您SessionServiceImpl
的注释是@Service
,您可以删除该@Bean
方法,让spring创建它.Spring已经为您提供了它.
或者,如果您SessionServiceImpl
没有注释@Service
,则需要以下内容:
@Bean
public SessionService sessionService() {
return new SessionService();
}
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,可能只是因为你SessionServiceImpl
的包裹没有被弹簧扫描(正如@MilošMilivojević所建议的那样)
您可以添加@ComponentScan
到Configuration类
@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
@ComponentScan("com.package.to.sessionServiceImpl-or-higher")
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20369 次 |
最近记录: |