Bean的作用域与生命周期

Bean的作用域与生命周期

Bean的作用域

Bean作用域的问题
当甲、乙两人一起去调用Bean时,甲修改的Bean的内容,会导致乙获得的内容就不是他所想要的内容了。

@Component
public class Users {
    @Bean
    public User user1() {
        User user = new Us
        user.setId(1);
        user.setName("1"); 
    }
}

甲进行修改操作

@Controller
public class BeanScopesController {
    @Autowired
    private User user1;
    public User getUser1() {
        User user = user1;
        user.setName("2"); 
        return user;
   }
}

乙获取Bean时得到的结果会是甲修改后的内容。原因是因为 Bean 默认情况下是单例状态(singleton),也就是所有⼈的使⽤的都是同⼀个对象,使⽤单例可以很⼤程度上提⾼性能,所以在 Spring 中 Bean 的作⽤域默认的是 singleton 单例模式。

Bean的六种作用域
1、singleton,单例作用域
2、prototype,原形作用域(多例作用域)

1 和 2 Spring Core 项目可以使用

3、request,请求作用域
4、session,回话作用域
5、application,全局作用域

3、4和5 Spring MVC 中使用

6、websocket,HTTP WebSocket 作用域

设置Bean作用域
通过将 @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) 或者 @Scope(“prototype”) (“” 内添加自己想设置的作用域)
添加在方法上可以使甲修改的内容不影响到乙获取Bean。

@Component
public class UserBean {
    @Scope("prototype")
    @Bean
    public User user1(){
        //伪代码一个对象
        User user = new User();
        user.setId(1);
        user.setName("三");
        user.setAge(1);
        return user;
    }
}

Bean的执行流程
1、加载Spring容器
2、加载Spring配置文件
3、加载配置文件的Bean,或根据配置文件中的组件根路径,进行Bean对象的扫描
4、加载的对象存储到Spring
5、其他需要使用Bean对象可以直接获取并使用
6、执行完后,进行销毁操作

Bean的生命周期

Bean的生命周期分为五部分
1、实例化Bean:为Bean对象分配内存
2、设置属性:Bean进行初始化注入
3、初始化:各种通知(Aware),执行初始化方法@PostConstruct,执行init-method初始化方法,BeanPostProcessor 处置和后置方法
4、使用Bean
5、销毁Bean:@PreDestroy 销毁前方法,DIsposableBean 销毁接口的实现方法,dstory-method 销毁前的执行方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值