当前位置: 首页 > 面试题库 >

@Service和@Scope(“ prototype”)一起

法烨华
2023-03-14
问题内容

我有一个@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(){
    ...
    }
}

我使用自动配置属性运行spring boot。我比较“ emailService”对象是否相同,并且得到相同的一个对象。这意味着@Scope(“
prototype”)无法与@Service一起正常使用。您在这里看到任何问题吗?我是否忘记了要添加的其他代码?

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


问题答案:

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

这应该可以解决问题:

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

另外,您也可以将定义LoginController为原型。



 类似资料:
  • 问题内容: 我想在控制器中使用带注释的原型bean。但是春天正在创建一个单例豆。这是该代码: 控制器代码: 速度模板: Spring config.xml已启用组件扫描: 每次我都会增加计数。无法弄清楚我要去哪里错了! 更新资料 正如@gkamal所建议的那样,我使可以解决问题。 更新的代码: 问题答案: 范围原型意味着每次你向spring(getBean或依赖项注入)请求实例时,它将创建一个新实

  • 如何使用和方法将对象从一个控制器发送到另一个控制器? 它的工作方式并不像我想的那样。和如何工作?

  • 最近在学习原型和原型链。在控制台里,我遇到了一些不解的现象,代码如图 对于这个__proto__有些看不明白,为什么不是null,而是Fn的prototype。 而我打印 fn.__proto__.__proto__.__proto__ 的结果是我预想的 null。 然后我也还想知道这个 proto 和 [[Prototype]] 有什么区别么?为什么到这一层,突然没有[[Prototype]]转

  • 问题内容: 如何使用和方法将对象从一个控制器发送到另一个控制器? 它不按我认为的方式工作。如何做和工作? 问题答案: 首先,父子范围关系确实很重要。你有两种可能性发出某些事件: -将事件向下分发到所有子范围, -通过范围层次结构向上调度事件。 我对你的控制器(作用域)关系一无所知,但是有几种选择: 如果scope of 是作用域的父级,则你的代码应通过替换为来工作: 如果你的范围之间没有父子关系,

  • prototype 属性 prototype 属性使您有能力向对象添加属性和方法。 语法: Object.prototype.name = value;

  • prototype 属性 prototype 属性使您有能力向对象添加属性和方法。 语法: Object.prototype.name = value;

  • prototype 属性 prototype 属性使您有能力向对象添加属性和方法。 语法: Object.prototype.name = value;

  • prototype 属性 prototype 属性使您有能力向对象添加属性和方法。 语法: Object.prototype.name = value;