Spring提供两种管理对象生命周期的方式:

1.在使用@Component注解管理Bean组件时候,使用@PostConstruct和@PreDestroy注解管理对象的声明周期方法
a.注意这两个注解不是Spring注解,是Java提供的扩展注解,需要导入
javax.annotation包,利用Maven导入即可。
b. @PostConstruct注解标注的方法在创建对象以后执行c. @PreDestroy注解标注的方法在关闭容器关闭对象时候执行
2.在使用@Bean注解管理Bean组件时候,在其inltMethod和destroyMethod属性上标注生命周期
管理方法名。
a. initMethod属性引用的方法在创建对象以后执行
b. destroyMethod属性引用的方法在容器关闭时候执行
3.@Scope("prototype”)时候,每次使用都会创建一个对象,Spring为了避免内存泄露,不
会缓存对象的引用,所以Spring关闭时候就无法处理对象的销毁方法了!

懒惰初始化

为了尽可能的提高性能,Spring默认情况下在启动时候将Bean立即实例化,这样在使用Bean对象就可以立即可以使用,减少了时间延迟。立即实例化也有缺点,如果某个Bean很少使用,甚至可能不使用的情况下,立即实例化为对象占用了宝贵的内存资源。比如上面案例中,没有使用FileLogger对象,但是却被创建出来,照成了资源浪费。
为了解决这个情况,Spring提供了“懒惰初始化“功能,开启这功能,可以在需要使用对象时候初始化对象,如果不使用对象就不初始化对象,这样就可以充分利用内存资源,避免浪费。对应使用率很少的Bean组件应用采用懒惰方式初始化。懒惰初始化第一次使用对象时候需要初始化,所以在第一次使用对象时候会有所延迟。对于性能要求高,肯定被使用的对象,不要采用懒惰初始化了。
Spring中利用@Lazy注解开启懒惰初始化,开启懒惰初始化后如果不使用Bean组件,将不会初始化对象。
1 @Lazy 可以与@Component一起使用

2. @Lazy 可以与@Bean一起使用