注:完整代码在文章最后
生命周期:就是某个对象从创建到最终销毁整个过程当中会经历的历程!
通常,需要讨论生命周期时,对应的数据类型的对象都不是由开发人员自行维护的!
被容器维护的对象,都是由容器创建对象,并在适当的时候调用其中的某些方法的!而开发人员需要做的就是“确定满足某条件的时候应该执行什么任务”!也就是说,“容器决定什么时候执行,开发人员决定执行时做什么”。
学习生命周期的意义就是“知道在什么时候需要做什么事情”!
以Servlet
为例,其生命周期中会有几个特殊的方法,在特定的情况下会被调用,这些就称之为生命周期方法:
init()
:当Servlet
被创建对象后,立即执行,且只执行1次,该方法适合编写一些初始化相关的代码;service()
:当接收到匹配的请求后会被调用,接收到多少次请求,就执行多少次该方法;destroy()
:当Servlet
对象即将被销毁之前执行,且只执行1次,该方法适合编写一些与结束相关的代码,例如关闭等等。
当使用Spring框架后,某些类的对象交给Spring框架来管理了,那么,这些对象在什么时候被创建、什么时候被销毁,以及创建过程和销毁过程中需要执行某些代码,对于开发人员来说,一定程度上是不可控的!
Spring框架允许用户在类中自定义最多2个方法,分别表示“初始化方法”和“销毁方法”,并且,Spring框架会在创建对象之后自动调用初始化方法,会在销毁对象之前调用销毁方法!
关于方法的定义:
- 访问权限:应该使用
public
权限; - 返回值类型:使用
void
; - 方法名称:自定义;
- 参数列表:空。
例如,在User
类中自定义2个生命周期方法:
public void init() {
System.out.println("User.init()");
}
public void destroy() {
System.out.println("User.destroy()");
}
然后,在配置对象的方法之前的@Bean
注解中配置这2个方法作为生命周期方法:
@Bean(initMethod="init", destroyMethod="destroy")
public User user() {
return new User();
}
全部代码:
User类
public class User {
public User() {
System.out.println("User.User()");
}
public void init() {
System.out.println("User.init()");
}
public void destroy() {
System.out.println("User.destroy()");
}
}
Beans类:
public class Beans {
@Bean(initMethod = "init",destroyMethod = "destroy")
//@Scope ("prototype")
public User user() {
return new User();
}
}
//Demo主类:
public class Demo {
public static void main(String[] args) {
//获取容器
AnnotationConfigApplicationContext ac
= new AnnotationConfigApplicationContext(Beans.class);
//获取对象
User user1 = ac.getBean("user",User.class);
User user2 = ac.getBean("user",User.class);
User user3 = ac.getBean("user",User.class);
//测试
System.out.println(user1);
System.out.println(user2);
System.out.println(user3);
//关闭资源
ac.close();
}
}