- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是 spring 的新手,正在尝试使用 spring boot 和 jsp 创建一个网络应用程序,我可以在树莓派上使用 tomcat8 进行部署。我可以通过 sts 在嵌入式 tomcat 实例上部署我的应用程序,我还可以将 war 文件部署到 Jenkins 而不会出现任何错误。但是,当我将 war 添加到 tomcat8 webapps 文件夹并启动 tomcat 时,出现以下错误:
2016-04-19 10:54:41.384 WARN 5525 --- [ost-startStop-1] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void com.rcctv.controllers.UserController.setUserService(com.rcctv.services.UserService); nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userServiceImpl' defined in file [/usr/share/tomcat8/webapps/RaspberryCCTV-0.0.1-SNAPSHOT/WEB-INF/classes/com/rcctv/services/UserServiceImpl.class]: Unsatisfied dependency expressed through constructor argument with index 1 of type [org.springframework.security.crypto.password.PasswordEncoder]: : Error creating bean with name 'webSecurityConfig': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'userServiceImpl': Requested bean is currently in creation: Is there an unresolvable circular reference?; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'webSecurityConfig': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'userServiceImpl': Requested bean is currently in creation: Is there an unresolvable circular reference?
我已经尝试使用@Lazy 注释我的配置类并向我的userServiceImpl 类添加setter 方法,但我仍然遇到了问题。任何帮助将不胜感激?
网络配置类
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Value("${rememberMe.privateKey}")
private String rememberMeKey;
@Value("${spring.profiles.active}")
private String env;
@Resource
private UserDetailsService userService;
@Bean
public HibernateJpaSessionFactoryBean sessionFactory() {
return new HibernateJpaSessionFactoryBean();
}
@Bean
public RememberMeServices rememberMeServices() {
TokenBasedRememberMeServices rememberMeServices = new TokenBasedRememberMeServices(rememberMeKey, userService);
return rememberMeServices;
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/",
"/home",
"/error",
"/signup",
"/forgot-password",
"/reset-password/*",
"/public/**",
"/users/*").permitAll()
.anyRequest().authenticated();
http
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/raspberrycctv")
.permitAll().and()
.rememberMe().key(rememberMeKey).rememberMeServices(rememberMeServices()).and()
.logout()
.permitAll();
if (!env.equals("dev"))
http.requiresChannel().anyRequest().requiresSecure();
}
@Autowired
@Override
protected void configure(AuthenticationManagerBuilder authManagerBuilder) throws Exception {
authManagerBuilder.userDetailsService(userService).passwordEncoder(passwordEncoder());
}
}
用户服务实现
@Service
@Transactional(propagation=Propagation.SUPPORTS, readOnly=true)
public class UserServiceImpl implements UserService, UserDetailsService {
private static final Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);
private UserRepository userRepository;
private PasswordEncoder passwordEncoder;
private MailSender mailSender;
@Autowired
public UserServiceImpl(UserRepository userRepository,
PasswordEncoder passwordEncoder,
MailSender mailSender) {
this.mailSender = mailSender;
this.userRepository = userRepository;
this.passwordEncoder = passwordEncoder;
}
@Autowired
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Autowired
public void setPasswordEncoder(PasswordEncoder passwordEncoder) {
this.passwordEncoder = passwordEncoder;
}
@Autowired
public void setMailSender(MailSender mailSender) {
this.mailSender = mailSender;
}
@Override
@Transactional(propagation=Propagation.REQUIRED, readOnly=false)
public void signup(SignupForm signupForm) {
final User user = new User();
user.setEmail(signupForm.getEmail());
user.setName(signupForm.getName());
user.setPassword(passwordEncoder.encode(signupForm.getPassword()));
user.getRoles().add(Role.UNVERIFIED);
user.setVerificationCode(RandomStringUtils.randomAlphanumeric(16));
userRepository.save(user);
TransactionSynchronizationManager.registerSynchronization(
new TransactionSynchronizationAdapter() {
@Override
public void afterCommit() {
try {
String verifyLink = Utilities.hostUrl() + "/users/" + user.getVerificationCode() + "/verify";
mailSender.send(user.getEmail(), Utilities.getMessage("verifySubject"), Utilities.getMessage("verifyEmail", verifyLink));
logger.info("Verification mail to " + user.getEmail() + " queued.");
} catch (MessagingException e) {
logger.error(ExceptionUtils.getStackTrace(e));
}
}
});
}
}
最佳答案
我认为你应该通过Spring Reference关于 IoC 容器。
WebSecurityConfig类需要UserDetailsService,由UserServiceImpl实现。此外,UserServiceImpl 需要 WebSecurityConfig 提供的 PasswordEncoder。这会导致循环引用。删除构造函数注入(inject)应该足以解决您的问题。
旁注:尽量不要使用构造函数注入(inject)。 Spring 在 DI 方面很聪明,但是如果你使用构造函数注入(inject),你就会迫使 spring 使用你的方式。这也可能导致循环引用错误。
我建议您至少浏览一下这篇文章:https://steveschols.wordpress.com/2012/06/05/i-was-wrong-constructor-vs-setter-injection/
关于java - 尝试将 spring boot war 部署到 tomcat8 时 Unresolved 循环引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36716671/
节点版本:v6.11.0 错误信息: Unable to resolve path to module './coins.json'. (import/no-unresolved) 我还附上错误的屏幕
我的 flutter 应用程序运行良好,直到我停止成功构建的日子 android/app/src/main/kotlin/com/apps/myapp/MainActivity.kt 文件 packa
我在使用 kotlin 版本 1.3.41 的 kotlin 项目中遇到问题 Unresolved reference :我无法找出为什么会出现该问题?。我也降级了 kotlin 版本但没有效果。 当
在编译我的代码时,我收到此错误。 1>MSVCRTD.lib(crtexe.obj):错误 LNK2019:函数 ___tmainCRTStartup 中引用了未解析的外部符号 _main1>C:\U
我一直遇到这两个错误,但我似乎找不到有效的解决方案。 LNK1120: 1 unresolved externals Error 1 error LNK2019: unresolved externa
我想使用 SQLite,但出现 Unresolved -* 错误。以下是我所做工作的总结: 这是三个目录: 源文件 -->include -->src -->sqlite3 我已将以上三个目录全部添加
我在尝试构建时收到以下错误: 1> MSVCRTD.lib(crtexew.obj) : error LNK2019: unresolved external symbol _WinMain@16 r
我在构建程序时不断收到“未解析的外部符号”错误。但是,该程序编译正常。我正在使用 GLFW 和 GLAD 库。 #include #include #include void framebuff
我是谷歌测试框架的新手。这是我的第一个谷歌测试测试项目。我做了像这个网站http://www.bogotobogo.com/cplusplus/google_unit_test_gtest.php这样
当我尝试编译我的代码时,我遇到了两个错误。我已经定义了 win32 控制台应用程序。我什至还没有开始编码。我的配置如下 - 链接器 - 子系统 - 控制台;链接器 - 高级 - 入口点 - 空白。
我尝试构建我的应用程序,但失败了,仅显示一条消息: Failed to resolve: play-services-basement 我的应用程序昨天成功构建。自昨天成功构建以来,没有代码更改。我的
任务是找到所有可表示为两个自然数的开方之和的二值数。我试试这个: func = [sqrt (x) + sqrt (y) | x a -> a mod :: Integral a => a -> a
Kotlin: Unresolved reference: totalFee 我只是在做这个小虚拟程序来练习,但它说totalFee尝试将值打印到屏幕时未解决。我已经看了一段时间了,不知道为什么。da
我正在编写一个小程序来判断字符串数组向前和向后读取是否相同。现在我的程序应该返回 false。我遇到了一些困难,因为当我扫描数组时,我希望第二个 for 循环扫描第一个 for 循环所在的相同索引,但
请问有人可以针对我的问题发布错误更正并经过测试的代码吗?程序确实 - 22.php 具有以下形式。当用户输入并单击“提交”按钮时,结果应从 23.php 中获取并显示在 22.php 上的 div 中
当我编译它时给出错误信息: usimage.cpp Generating Code... Linking... Creating library .\Output/gci2.lib and ob
我有以下项目文件: //connections.cpp #include "stdafx.h" #include "LibraryHeaders.h" #include "FileManager.h"
我正在写一个游戏,但我遇到了一个问题,导致“C++ Unresolved external 问题” ** 我的类(class):** Terrain.h Class Terrain {}; 物理对象.
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我正在使用 Visual Studio 2012 完成编程原则和实践中的练习。尝试编译下面的源代码时,我遇到了链接器错误: unresolved symbol int foo. 我不明白为什么符号没有
我是一名优秀的程序员,十分优秀!