一、Spring的执行流程
1.在启动类中遇到 ApplicationContext对象会启动Spring容器
2.找到Spring容器设置的配置文件
3.如果设置了base-package,就会循环base-package中所有的类,看是否加
了五大类注解
4.如果加了五大类注解,那么就进行初始化和属性依赖的赋值
二、Bean的作用域和生命周期
1.作用域
Spring 容器在初始化⼀个 Bean 的实例时,同时会指定该实例的作⽤域。Spring有 6 种作⽤域,最后
四种是基于 Spring MVC ⽣效的:
- singleton:单例作⽤域
- prototype:原型作⽤域(多例作⽤域)
- request:请求作⽤域
- session:回话作⽤域
- application:全局作⽤域
- websocket:HTTP WebSocket 作⽤域
我们来看一个案列,使用UserController和UserController2来使用Bean中的User
UserController:
@Controller
public class UserController {
@Autowired
private User user;
public void printUser(){
System.out.println(user);
User myUser = user;
myUser.setName("wukong");
System.out.println("myUser-->"+ myUser);
}
}
UserController2:
@Controller
public class UserController2 {
@Autowired
private User user;
public void printUser2(){
System.out.println("User-->"+user);
}
}
UserBean:
@Component
public class UserBean {
@Bean
public User serUser(){
User user = new User();
user.setId(1);
user.setName("zhangsan");
return user;
}
}
得到结果如下:
但是我们加上作用域的限制:
运行得到结果:
这是因为Bean的作用域默认是singleton单例作用域每个地方用的是同一个Bean,变成prototype:原型作⽤域(多例作⽤域)后每次对该作⽤域下的Bean的请求都会创建新的实例:获取Bean(即通applicationContext.getBean等⽅法获取)及装配Bean(即通过@Autowired注⼊)都是新的对象实例。
2、Bean的生命周期
所谓的⽣命周期指的是⼀个对象从诞⽣到销毁的整个⽣命过程,我们把这个过程就叫做⼀个对象的⽣命周期。
Bean 的⽣命周期分为以下 5 ⼤部分: