Spring管理的对象作用域默认单例,同一个Bean,获取多少次都是同一个对象。
在类上添加以下注解:
- @Scope("singleton")默认单例,
- @Scope("prototype")不是单例。
小案例:以UserMapper为例
创建UserMapper类
package spring;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component
@Scope("prototype")
public class UserMapper {
}
输出测试结果
对于非单例的Bean随时用完随时销毁,单例的一直都在。
@Lazy懒加载
- 单例情况下默认不是懒加载
- 优点:当需要对象的时候才把它创建出来,不浪费资源。
- 缺点:时间不可控,万一服务器任务负荷,不一定什么时间把对象创建出来。
Spring创建并管理对象,开发人员无法干预对象,Spring允许在类中自定义最多两个方法,即初始化方法和销毁方法。
- @PostConstruct在初始化方法声明之前添加
- 初始化方法:价值不大,很少用到。可以把代码写到构造方法里面。
- @PreDestroy在销毁方法的声明之前添加
- 销毁方法:价值大。如果用到流、线程池或数据库连接池等,就应该做个销毁,否则会导致内存溢出、内存泄漏等问题。
- 注意:仅当类的对象被Spring管理且是单例的,才有讨论生命周期的价值。
小案例:以UserMapper为例
package spring;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Component
public class UserMapper {
@PostConstruct
public void init(){
System.out.println("UserMapper.init()");
}
@PreDestroy
public void destroy(){
System.out.println("UserMapper.destroy()");
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)