你好。请告诉我如何通过带参数的构造函数创建 bean。例如,有这样一个类(两个构造函数——空的和带参数的;为简洁起见,不给出getter、setter):
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>
其实问题是这样的:
- 如何使用带有类型参数的构造函数创建路由(Route)
LocalDateTime
; - 如何通过将必要的参数传递给构造函数来创建不同的路由(垃圾箱);即,让参数不写在xml文件中(那么所有路由创建的都是一样的),但是可以从代码中动态传递必要的参数(类似
Route route = new Route(arrive, departure, from, to)
)。
我将不胜感激。
Spring 上下文默认创建的所有类都是Singletone,这意味着它们在应用程序启动时在单个实例中创建一次,并一直存在到应用程序结束。如果你想要有很多 Routes,那么这个选项不适合你。只是不要在 Spring 配置中包含 Route,而是像 Java 中的普通对象一样创建和使用它。或者使用范围原型。
添加: 使用 Java 配置(在注释上)而不是 XML 的最简单方法
获取类的实例:
带有 XML 配置的示例(经过测试 - 绝对有效)
application-config.xml 文件
你好.java文件
主.java文件
我没有找到有关如何将动态参数传递给 bean 构造函数的信息。通常,参数通过 xml 或属性文件传递。
在您的情况下,选项可能如下:以通常的方式创建原型bean(没有构造函数),并在使用 setter 创建 bean 后设置必要的私有字段,然后每个 bean 将有自己独特的配置。