我有一个带@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属性和创建的额外方法。我知道只使用注释的方法较短。
答案 0 :(得分:1)
您必须在scope
注释中指定代理模式。
这应该可以解决问题:
@Service
@Scope(value="prototype", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class EmailService {}
或者,您也可以将LoginController
定义为原型。