鉴于在编程时候,启动时候过于依赖经验,缺乏对框架知识的了解,初始化时候使用直接引用代码形式去初始化某些资源,而不是使用spring提供的方式去初始化。
原代码:
@SpringBootApplication
public class TestApplication implements CommandLineRunner {
public static void main(String[] args) {
VirtualDataUtil.initVirtualData(); //用于初始化某些数据
SpringApplication.run(TestApplication .class, args);
}
}
虽然VirtualDataUtil.initVirtualData()确实可以在这样初始化数据,但是长远来说会造成代码的混乱。spring对bean的生命周期操作提供了支持,有java配置以及注解配置,本次只说一下注解说明。
注解方式有:@PostConstruct和@PreDestroy,@PostConstruct是在构造函数执行完之后执行,@PreDestroy是在bean销毁之前执行。
本次例子仅用注解注入,不使用xml配置
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.springframework.stereotype.Component;
@Component
public class PersonService {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@PostConstruct
public void init() {
System.out.println("I'm init method PostConstrut...." + message);
}
@PreDestroy
public void dostory() {
System.out.println("I'm destory method @PreDestroy....." + message);
}
}
@SpringBootApplication
public class TestApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(TestApplication .class, args);
}
启动spring项目,会出现
然后在某些类执行其dostory方法,销毁bean前:
/**
*
*/
@Component("qianhaiCreditGatewayService")
public class QianhaiCreditGatewayServiceImpl {
@Autowired
PersonService personService;
/**
* 测试
*
* @param request
* @return
*/
@Override
public String querySomething(String data) {
personService.dostory();
return data;
}
}
编程之路漫漫悠长,不断学习才能不会落后,此文章只是简单讲了一下初始化的其中一个操作,如果有更好的做法或者此次做得不足的,请指点