当前位置: 首页 > news >正文

长沙做网站建设的网上有免费的网站吗

长沙做网站建设的,网上有免费的网站吗,商标注册查询方法,网站工程师是做什么的文章目录 一、背景二、AutowireCapableBeanFactory 方法 autowireBean 分析三、Spring 容器中 scope 为 prototype 类型 Bean 的回收机制四、总结 一、背景 最近做 DDD 实践时,遇到业务对象需要交给 Spring 管理才能做一些职责内事情。假设账号注册邮箱应用层代码流…

文章目录

        • 一、背景
        • 二、AutowireCapableBeanFactory 方法 autowireBean 分析
        • 三、Spring 容器中 scope 为 prototype 类型 Bean 的回收机制
        • 四、总结

一、背景

最近做 DDD 实践时,遇到业务对象需要交给 Spring 管理才能做一些职责内事情。假设账号注册邮箱应用层代码流程:

public void registerEmail(Long id) {Account account = accountRepository.findById(id);account.registerEmail();
}

其中业务对象 Account 表示账号聚合:

@Component
@Scope(value = BeanDefinition.SCOPE_PROTOTYPE)
public class Account {@Autowireprivate EmailService emailService;private String id;private String name;// 其他账号属性// 注册邮箱public void registerEmail() {//....emailService.register();}
}

负责 Account 的仓储服务 AccountRepository:

@Repository
public class AccountRepository {@Autowireprivate AutowireCapableBeanFactory beanFactory;public Account findById(Long id) {// 1. 从 DB 查询AccountDO accountDO = accountMapper.findById(id);// 2. 转换成业务对象Account account = convert(accountDO);// 3. 交给 Spring 管理beanFactory.autowireBean(account);return account;}
}

有个疑问:账号每次注册邮箱后,Account 实例对象即然交给 Spring 来管理,那么会不会常驻在内存而引发内存溢出呢?

二、AutowireCapableBeanFactory 方法 autowireBean 分析

在这里插入图片描述

直接看方法签名:

Populate the given bean instance through applying after-instantiation callbacks and bean property post-processing (e.g. for annotation-driven injection). (翻译:通过实例化后回调和 bean 属性后处理来填充指定 bean 实例)

Note: This is essentially intended for (re-)populating annotated fields and methods, either for new instances or for deserialized instances. It does not imply traditional by-name or by-type autowiring of properties;(翻译:无论是新实例还是反序列化实例,本质上是为了(重新)填充带注解的字段和方法。 它并不意味着传统的按名称或按类型自动装配属性。)

从翻译字面意思上:该方法作用只是对指定对象进行属性填充,尤其是使用注解标注的属性。 再深入到源码:

在这里插入图片描述

可以看出,只做了三件事情,创建 Spring 标准 Bean 对象,并创建 BeanWrapper,最后进行 Bean 属性填充,其中 populateBean 方法并不陌生,Spring Bean 进行属性填充的标准方法。上述源码中创建 existingBean 的 BeanDefinition 时,同时设置了属性为原型(BeanDefinition.SCOPE_PROTOTYPE),也即意味着 Spring 对 existingBean 的管理同原型 Bean 的方式一样(从这里也可以看出 Account 类标记的 @Component 和 @Scope 注解可以去除,笔者已验证)。

三、Spring 容器中 scope 为 prototype 类型 Bean 的回收机制

想要弄明白 Spring Bean 会不会被 JVM 正常回收,要看是否会被 Spring 容器持有,所以要从 Bean 创建流程入手。直接看org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean 方法(源码比较简单,不做深入分析,直接说结论)可知,如果 Bean 实例是 singleton 的,会从 DefaultSingletonBeanRegistry 的 singletonObjects 属性中获取,如果获取不到,就会创建 Bean 实例存放到 singletonObjects 属性中:

public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements SingletonBeanRegistry {/** Logger available to subclasses */protected final Log logger = LogFactory.getLog(getClass());/** Cache of singleton objects: bean name --> bean instance */private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);//......}

DefaultListableBeanFactory 是 Spring IOC 容器的实现,归 Spring 容器管理,自然单例 Bean 也归 Spring 容器管理,所以说正常作用域为 singleton 的 Bean,其生命周期会长期被 Spring 容器管理,直到 Spring 容器被销毁。而作用域为 prototype 的 Bean 和正常 Java 对象一样 new 出来,使用完就会被 JVM 回收。

在这里插入图片描述

四、总结

通过 AutowireCapableBeanFactory 方法 autowireBean 可以将对象装配成 Spring 管理的标准 Bean 对象,主要是用于来填充有注解的属性,这样才可以使用 Spring 的 DI 特性。通过代码 new 出来的对象使用 AutowireCapableBeanFactory 方法 autowireBean 填充属性成为标准 Spring Bean 后不用担心内存溢出的问题,本质上和 Spring prototype Bean 的回收机制一样,使用完就有可能被 JVM 回收掉。

http://www.zhongyajixie.com/news/38625.html

相关文章:

  • ubuntu做网站开发百度推广电话客服
  • 做六个网站静态页多少钱爱站网长尾挖掘工具
  • 重庆学校网站建设网站公司
  • 网站建设优惠券跨境电商靠谱吗
  • 大连网站制作的公司哪家好企业官网定制设计
  • 有关于网站建设类似的文章百度教育网站
  • wordpress站点地图跨境电商关键词工具
  • 建设网站怎样赚钱搜索引擎优化的方法与技巧
  • 用阿里云做网站微信公众号推广方法有哪些
  • 爱藏网一家专业做收藏品网站科学新概念外链平台
  • 网站建设费 科目百度搜一搜
  • 怎么做自己的发卡网站steam交易链接在哪看
  • 湛江网站制作方案百度爱采购排名
  • 河南省人民政府朱良才搜索引擎优化的基本原理
  • 蛋糕网站网页设计关键词优化步骤简短
  • dede网站打不开怎么在百度上发布个人文章
  • 网站制作aqq专业软文
  • 做淘宝客个人网站大数据营销成功案例
  • 电子商务网站建设臧良运课后答案360识图
  • app网站开发招聘建网站找哪个平台好呢
  • 如何学做网站优化亚洲卫星电视网参数表
  • 网站被做301跳转了怎么办谷歌怎么投放广告
  • 营销网站设计方案设计公司排名前十强
  • 做外贸学英语的网站seo关键词优化哪个平台好
  • 网站开发与建设课程设计手机登录百度pc端入口
  • 公司网站建设好凡科建站登录官网
  • 网站建设套餐有哪些内容广州全网推广
  • 百度搜索什么关键词能搜到网站廊坊seo培训
  • 网站建设自学 优帮云深圳百度开户
  • 公司文化建设标题seo是什么意思