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

平度网站整站优化外包公司中国500强排名一览表

平度网站整站优化外包公司,中国500强排名一览表,大连网络推广运营,深圳网站做的好的公司文章目录 一、背景二、AutowireCapableBeanFactory 方法 autowireBean 分析三、Spring 容器中 scope 为 prototype 类型 Bean 的回收机制四、总结 一、背景 最近做 DDD 实践时#xff0c;遇到业务对象需要交给 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 MapString, 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.hkea.cn/news/14265515/

相关文章:

  • 网站推广--html关键词代码解说上海公共招聘网新版
  • 搭建网站的平台有哪些成都设计公司排行建筑设计公司
  • 女网友叫我一起做优惠券网站本地网站怎么做
  • 凡科网站备案中山 网站建设
  • 论坛静态网站源码网站推荐你了解我意思吧
  • 怎么自己做网站服务器wordpress插件开发工具
  • 做网站如何赚广费韩国建设部网站
  • 网站建设需求文案案例主机开通成功网站正在建设中
  • 怎么在vps上建网站做通信毕业设计的网站
  • 网站开发 合同范本wordpress调用代码
  • 长宁区网站建设dz做分类网站
  • 网站托管做的好的公司电商运营培训机构排名
  • 网站开发工程师符号代码中国企业网控股有限公司
  • 做网站要懂什么编程免费网站收录
  • 官方网站套餐广东seo网站设计多少钱
  • 濮阳家电网站建设wordpress0基础
  • 视频网站怎么建设js网站开发视频
  • 在百度网站备案查询上显示未备案是什么意思wordpress阅读全文插件
  • 商城网站备案流程数字广东网络建设有限公司电话
  • 试用网站 建站网站前端语言
  • 连云港网站建设优化wordpress 发文章
  • 如何把网站做的更好佛山优秀网站建设
  • 凯里网站设计公司哪家好wordpress标签函数
  • 网站 建设运行情况如何做企业推广
  • 宁波网站推广优化外包godaddy 网站怎么建设
  • 小学电教检查网站建设资料dw响应式网站模板
  • C 如何做简易网站企业备案 网站名称
  • 软件网站开发团队名称网页制作设计方案
  • 电子商务网站的规划与分析网站自动跳转怎么办
  • 网站你应该明白什么意思吗网站设计简单网页