У меня есть класс обслуживания с @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(){
...
}
}
Я запускаю весеннюю загрузку, используя свойство автоконфигурации. Я сравниваю, является ли объект emailService таким же или нет, и получаю то же самое один объект. Это означает, что @Scope ("прототип") не работает должным образом с @Service. Вы видите здесь что-то не так? Я забыл добавить еще несколько кодов?
Редактировать: Отвечая на @Janar, я не хочу использовать дополнительные коды для его работы, такие как свойство WebApplicationContext и дополнительный метод для создания. Я знаю, что есть более короткий способ, использующий только аннотацию.
Я уже видел этот пост, и да, возможно, вы правы, но я не хочу использовать context.getBean ("beanName") и WebApplicationContext в контроллере.




Вы должны указать режим прокси в аннотации scope.
Это должно помочь:
@Service
@Scope(value = "prototype", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class EmailService {}
В качестве альтернативы вы также можете определить LoginController как прототип.
Я думал, что тоже пробовал это решение, но оно не сработало. Я попробовал сейчас, и он работает. Спасибо. Вы знаете, что он устарел? Использую самые свежие версии spring.
Имейте в виду, что при этом будет создаваться новый bean-компонент при каждом вызове метода автоматически подключенного прокси.
Возможный дубликат @Scope ("prototype") область видимости bean-компонента не создает новый bean-компонент