使用包含自动装配类的@RequestMapping按类级别调用方法

时间:2017-08-08 09:36:03

标签: spring spring-mvc autowired request-mapping class-level

我正在尝试通过类级别(来自方法:身份验证)调用使用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方法吗?我不想将已经存在的代码粘贴到另一个类只是为了让它工作......

4 个答案:

答案 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方法中有很多不必要的代码用于我的目的。