Здравствуйте. Подскажите, пожалуйста, как можно создавать бины через конструктор с параметрами. Например, есть такой класс (два конструктора - пустой и с параметрами; геттеры, сеттеры для краткости не приводятся):
import java.time.LocalDateTime;
public class Route {
private LocalDateTime arrive;
private LocalDateTime departure;
private String from;
private String to;
public Route(){}
public Route(LocalDateTime arrive, LocalDateTime departure, String from, String to) {
this.arrive = arrive;
this.departure = departure;
this.from = from;
this.to = to;
}
// геттеры, сеттеры
public void printRoute(){
System.out.println("Откуда: " + from +
", куда: " + to +
", прибытие: " + arrive +
", отбытие: " + departure);
}
}
Основной класс:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
@SpringBootApplication
public class TrainScheduleApplication {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("app-context.xml");
Route route = ctx.getBean("routeEmpty", Route.class);
route.printRoute();
}
}
Файл "app-context.xml":
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans [url]http://www.springframework.org/schema/beans/spring-beans.xsd[/url]
[url]http://www.springframework.org/schema/context[/url] http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<bean id="routeEmpty" class="com.example.demo.Route">
</bean>
</beans>
Собственно, вызывает затруднение следующее:
LocalDateTime
;Route route = new Route(arrive, departure, from, to)
).Буду признателен за помощь.
Все классы, которые создаёт контекст Spring по умолчанию являются Singletone, что подразумевает, что они создаются один раз в единственном экземпляре при старте приложения и живут до его завершения. Если вы хотите иметь множество Route, то этот вариант вам не подходит. Просто не включайте Route в конфигурацию Spring, а создавайте и используйте его, как обычный объект в Java. Либо используйте scope prototype.
Добавлено: Самое простое использовать Java конфигурацию (на аннотациях), а не XML
@Configuration
public class Configuration{
@Bean
@Scope(value = "prototype")
@Lazy(value = true)
public Route getRoute(LocaldateTime arrive, LocalDateTime departure, String from, String to){
return new Route(arrive, departure, from, to);
}
}
Получение экземпляра класса:
public class TrainScheduleApplication {
@Autowired
private BeanFactory beanFactory;
public void exampleMethod(){
Route route = beanFactory.getBean(Route.class, arrive, departure, from, to);
}
}
Если хотите использовать XML конфигурацию, то следует указать фиктивные параметры конструктора класса
<?bean id="routeEmpty" class="com.example.demo.Route" scope="prototype">
<constructor-arg value="null"/> <!-- dummy value -->
<constructor-arg value="null"/> <!-- dummy value -->
<constructor-arg value="null"/> <!-- dummy value -->
<constructor-arg value="null"/> <!-- dummy value -->
</bean>
А при инициализации бина в коде укажите реальные параметры.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Есть консольное приложение, которое считает количество файлов в n-м количестве папок одновременноНеобходимо по нажатию ESC, остановить все...
Пишу чат бот для Facebook и столкнулся с проблемой при получении payload с нажатой кнопки юзером