第一次看Spring --我还有一个关于bean配置的问题,我也想安排一下。使用Spring,我创建了一个应用程序类和一个TaskClass,我希望使用一个配置类来调度和配置这个类。
应用类
@SpringBootApplication
@EnableScheduling
@ComponentScan("mmmi.pdws.cetrea")
public class Application {
public static void main(String[] args) {
SpringApplication.run(PdwsBackend.class, args); //Leftover from Boot project
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
taskClass task = ctx.getBean(taskClass.class);
}
}TaskClass
@Component
public class TaskClass {
private String taskName;
@Scheduled(fixedRate=1000)
public void lifeSign(){
System.out.println("My name is " + taskName);
}
public void setName(String name){this.name = name}
}AppConfig类
@Configuration
public class AppConfig {
@Bean
public TaskClass taskClass(){
TaskClass task = new TaskClass();
task.setName("SpringTask");
return task;
}
}来自Scheduler和AppConfig类的实例化对象自然不是same...but,有方法配置调度对象吗?
从弹簧调度参考的角度来看,它似乎可以用于XML?但是,如果我想使用Java配置类来实现它呢?
发布于 2017-03-24 13:26:18
如果要设置的值是常量,则可以将其放入application.properties文件中,并将其注入调度程序bean中直接使用@值注释。
application.properties
task.name=SpringTaskTaskClass
@Component
public class TaskClass {
private final String taskName;
public TaskClass(@Value("${task.name}") String taskName) {
this.taskName = taskName;
}
@Scheduled(fixedRate=1000)
public void lifeSign(){
System.out.println("My name is " + taskName);
}
public void setName(String name){this.name = name}
}如果不喜欢构造函数注入,也可以将值直接注入到字段。
当然,在AppConfig中声明的bean是多余的,因为TaskClass是用@Component注释的,并且会被@ComponentScan找到。
发布于 2017-03-24 13:26:37
在同一个spring ref 链接中,您可以阅读以下内容:
确保在用@Configurable注释并与容器一起注册为常规Spring的bean类上不使用@Configurable:,否则将获得双重初始化,一次通过容器,一次通过方面。
您可以做的就是使用@PostConstruct方法(在创建bean之后只调用一次)在您的TaskClass中设置taskName,如下所示,然后不需要您的AppConfig类:
@Component
public class TaskClass {
private String taskName;
@Postconstruct
public void init() {
taskName= "SpringTask";
}
@Scheduled(fixedRate=1000)
public void lifeSign(){
System.out.println("My name is " + taskName);
}
public void setName(String name){this.name = name}
}https://stackoverflow.com/questions/43000337
复制相似问题