Одна вещь, которую вы можете сделать, это поместить инстанцирование и инициализацию переменных в их собственный метод и аннотировать каждый метод аннотацией @Bean
.
Если вы сделаете это, вы должны аннотировать класс с помощью @Configuration
.
Ваш 2 метода будут выглядеть примерно так:
@Configuration
public class ConfigurationBean {
@Bean
public Configuration configuration() {
return new Configuration();
}
@Bean
public Template template() {
return configuration().getTemplate("...");
}
}
Кроме того, если вы не хотите создавать экземпляр Configuration
в виде отдельного компонента, вы можете объедините 2 вышеуказанных метода.
======= ОБНОВЛЕНИЕ, чтобы ответить на вопрос в комментарии =======
Если вы хотите использовать только что определенный Template
например, в других классах вам нужно пометить эти классы с помощью @Component
, чтобы они тоже стали бобами.
Пример:
@Component
public class OtherClassBean {
private final Template template;
public OtherClassBean(Template template) {
this.template = template;
}
}
, пожалуйста, будьте осторожны, потому что здесь отныне вы не можете вручную создать экземпляр OtherClassBean
, что означает, что строка, подобная new OtherClassBean(...)
, неправильна в 99% случаев и может привести к непредвиденному поведению.
Это потому, что подразумеваются все компоненты быть управляемым весной, которая может быть достигнута ved, если Spring создает экземпляры этих классов.
Единственное исключение из этого практического правила - в моем первоначальном ответе, где вы создаете экземпляр компонента в методе, аннотированном @Bean
.
I Знайте, что для большинства людей, пытающихся выучить это, запутанная тема c, поэтому не стесняйтесь задавать больше вопросов.