我正在尝试通过类级别(来自方法:身份验证)调用使用BaseRequestHandler
(signIn)注释的方法,如下所示:
from filters import filters
class BaseRequestHandler(RequestHandler):
def get_template_namespace(self):
namespace = super(BaseRequestHandler, self).get_template_namespace()
namespace.update(filters)
return namespace
我的控制器看起来像:
@RequestMapping
用户管理器使用@component注释:
@RequestMapping(value = /authenticate, method = RequestMethod.POST)
public @ResponseBody Response authentication(HttpServletRequest request)
{
UserController user = new UserController();
return user.signIn(request, null);
}
问题在于我打电话给方法" signIn"并通过" / authenticate"新建一个UserController实例。映射时,UserManager变为NULL。所以现在我假设自动装配在这样做的时候不起作用。
还有其他方法可以调用signIn方法吗?我不想将已经存在的代码粘贴到另一个类只是为了让它工作......
答案 0 :(得分:1)
自动跟踪仅适用于spring托管bean。如果您使用new
关键字创建一个类,则它不是Spring托管bean,并且autowiering将不起作用。
您可以尝试自动装配包含注释方法的类,或者更好地将代码放在可由两种方法使用的服务类中。
答案 1 :(得分:0)
@Autowired没问题。有两种类型的注释 首先是方法基础注释和字段级注释。您刚刚使用了字段级注释。使用" org.springframework.beans.factory.annotation.Autowired"检查您的导入类。或者它可能是启动" UserManager"
的问题答案 2 :(得分:0)
我不知道你为什么不把逻辑移到单独的服务类中,但试试这个:
UserController.java
public UserController(UserManager userManager) {
this.userManager = userManager;
}
然后在身份验证资源方法所在的控制器内部:
@Autowired UserManager userManager;
@RequestMapping(value = /authenticate, method = RequestMethod.POST)
public @ResponseBody Response authentication(HttpServletRequest request) {
UserController user = new UserController(userManager);
return user.signIn(request);
}
答案 3 :(得分:0)
所以最后我把逻辑分开了。虽然我尝试过的一个解决方案是我只能在signIn方法中添加另一个映射,而不是在另一个类中添加新方法,因为逻辑类似。我仍然选择了单独的逻辑,因为signIn方法中有很多不必要的代码用于我的目的。