bean的作用域和生命周期

bean的作用域:bean在spring中的某种行为模式。

spring bean作用域

spring bean作用域(scope):

  1. 单例模式 singleton(默认模式)
    该作用域下的bean在IoC容器中只存在一个实例。主要是出于性能的考虑。
    场景:通常无状态的bean使用该作用域。无状态表示bean对象的属性状态不需要更新

  2. 原型作用域(多例)prototype
    每次对作用于下的bean请求,都会创建新的实例。
    场景:通常有状态的bean使用该作用域。有可能会更新属性。

  3. 请求作用域 request
    每次HTTP请求会创建新的bean实例,类似于prototype
    场景:一次HTTP的请求和响应的共享bean
    适用于 spring MVC / spring Web

  4. 会话作用域 session
    每次session会话,共享一个bean
    适用于spring MVC

  5. 全局作用域 application
    一个 HTTP servlet context中,共享一个bean
    适用于spring MVC

  6. HTTP websocket作用域 websocket
    网络长连接,只适用于Spring WebSocket项目

设置作用域

使用 @Scope 标签声明 Bean 的作用域

  1. 直接设置值@Scope("prototype")
@Component
public class UserBeans {
    @Bean
    @Scope("prototype")
    public User user() {
        User user = new User();
        user.setId(1);
        user.setName("zhang san");
        return user;
    }
}
  1. 使用枚举设置@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Component
public class UserBeans {
    @Bean
    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
    public User user() {
        User user = new User();
        user.setId(1);
        user.setName("zhang san");
        return user;
    }
}

spring的执行流程

  1. 启动容器
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");

加载配置文件:类加载路径下的spring-config.xml
spring-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <content:component-scan base-package="com.java.demo"></content:component-scan>
</beans>
  1. 根据配置完成bean初始化
    根据spring-config.xml bean的配置,扫描com.java.demo包下的spring注解

  2. 注册bean对象到容器中
    只有在包扫描路径上的类,并且使用了spring注解,才可以注册到容器中。

  3. 装配bean的属性
    如果bean对象需要使用其他bean对象作为属性,使用注解@Autowired,@Resource

bean的生命周期

bean对象从诞生到销毁的过程

  1. 实例化bean(为bean分配内存空间) 实例化 不等于 初始化
  2. 设置属性(对bean进行注入和装配)
  3. bean初始化:初始化的时候就有可能会用到属性,所以要先设置属性再初始化
    • 3.1 执行各种通知:
    • 3.2 初始化前置方式
    • 3.3 初始化方法 (设置了就会执行,不设置就不执行)
      1. xml方式;
      2. 注解方式
    • 3.4 初始化后置方法
  4. 使用bean
  5. 销毁bean

lombok使用:

  1. 在框架中添加Lombok依赖
  2. 添加@Getter@Setter
import lombok.Getter;
import lombok.Setter;

// lombok:为了简化代码中必须写的代码,不再需要写set和get方法
@Getter
@Setter
public class User {
    private int id;
    private String name;
}
  1. 别忘了下载插件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值