@Service和@Scope("原型")在一起

时间:2018-03-30 13:25:33

标签: java spring-mvc spring-boot

我有一个带@Service和@Scope的服务类(" protoype")。我希望这个服务在控制器类中表现得像原型。以下是我如何使用它:

@Controller
@RequestMapping(value="/")
public class LoginController {
  @Autowired
  private EmailService emailService;

  @RequestMapping(value = "/register", method = RequestMethod.POST)
  public String register(){
    System.out.println(emailService);
    emailService.sendConfirmationKey();
  }
  @RequestMapping(value = "/resetKey", method = RequestMethod.POST)
    System.out.println(emailService);
    emailService.sendResetKey();
}

这是服务类:

@Service
@Scope("prototype")
public class EmailService {
    @Autowired
    private JavaMailSender mailSender;

    public void sendConfirmationKey(){
    ...
    }
    public void sendResetKey(){
    ...
    }
}

我使用autoconfiguration属性运行spring boot。我比较了电子邮件服务'对象是否相同,我也是一样的  一个对象。这意味着@Scope(" prototype")与@Service无法正常工作。你觉得这里有什么不对吗?我是否忘了添加更多代码?

编辑: 回复@Janar,我不想使用其他代码来使其工作,例如WebApplicationContext属性和创建的额外方法。我知道只使用注释的方法较短。

1 个答案:

答案 0 :(得分:1)

您必须在scope注释中指定代理模式。

这应该可以解决问题:

@Service 
@Scope(value="prototype", proxyMode=ScopedProxyMode.TARGET_CLASS)  
public class EmailService {}

或者,您也可以将LoginController定义为原型。