(1)spring 默认是单例,
单例情况下:所有线程对于同一个类共同拥有一个对象,此时如果在类里面创建一个类变量如下
由于所有线程共享一个类对象,所以也共享一个类变量,每次请求都会增加
@Controller @RequestMapping("/user") public class User { private int i=0;//类变量 @RequestMapping("/list.shtm") public String list() { i++; System.out.println("此变量会一直增加"+i); return ""; } }
(2)spring 默认不是懒加载
当spring不是懒加载时,项目启动,spring 初始化,spring 会把所有的 扫描包下的 ,所有带spring 注解(@Component、@Repository、@Service、@Controller)的类 都初始化,初始化时,会调用默认构造方法,即 空的构造方法,当定义了public AA(){ 代码块 } 空构造方法时,就会自动执行空构造方法中的语句,当在类中加入非空构造方法,spring会报错误,找不到合适的构造方法。
当spring 设置了default-lazy-init="true",即懒加载时,spring并不会主动初始化带注解的类,由于在controller中会注入 service层的类,由于,controller层的spring-mvc 不是懒加载,所以,当在controller中注入service时,就会初始化此service类。即调用到谁初始化谁。