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

江西建设厅官方网站哈尔滨制作网站工作室

江西建设厅官方网站,哈尔滨制作网站工作室,做网站优化时 链接名称"首页"有必要添加nofollow吗?,python做h5网站beanFactory接口还可以添加bean的后处理器以及提前初始化单例,不过beanFactory不会主动做这些事情,需要我们主动调用方法处理。1.调用Bean后处理器beanFatory可以添加Bean的后处理器,针对bean的生命周期的各个阶段做拓展,例如Auto…

         beanFactory接口还可以添加bean的后处理器以及提前初始化单例,不过beanFactory不会主动做这些事情,需要我们主动调用方法处理。

1.调用Bean后处理器

           beanFatory可以添加Bean的后处理器,针对bean的生命周期的各个阶段做拓展,例如@Autowired  @Resource。

public static void main(String[] args) {DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();//bean的定义(class,scope,初始化,销毁)AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition(Config.class).setScope("singleton").getBeanDefinition();beanFactory.registerBeanDefinition("config",beanDefinition);//给BeanFactory一些常用的后处理器AnnotationConfigUtils.registerAnnotationConfigProcessors(beanFactory);//BeanFactory后处理器主要功能是补充一些bean的定义beanFactory.getBeansOfType(BeanFactoryPostProcessor.class).values().stream().forEach(beanFactoryPostProcessor -> {beanFactoryPostProcessor.postProcessBeanFactory(beanFactory);});//Bean后处理器beanFactory.getBeansOfType(BeanPostProcessor.class).values().forEach(beanFactory::addBeanPostProcessor);for(String name:beanFactory.getBeanDefinitionNames()){System.out.println(name);}System.out.println(beanFactory.getBean(Bean1.class).getBean2());}

          配置类如下,这样通过@Autowired注入的Bean2才能被解析,否则最后一个输出为null。

@Configurationstatic class Config{@Beanpublic Bean1 bean1(){return new Bean1();}@Beanpublic Bean2 bean2(){return new Bean2();}}static class Bean1{private static final Logger log = LoggerFactory.getLogger(Bean1.class);@Autowiredprivate Bean2 bean2;public Bean1(){log.debug("构造bean1");}public Bean2 getBean2(){return bean2;}}static class Bean2{private static final Logger log = LoggerFactory.getLogger(Bean2.class);public Bean2(){log.debug("构造 Bean2()");}}

结果如下:

       bean2对象被打印了。

       其中config下面打印了5个类,它们是通过AnnotationConfigUtils创建的,里面的第二个类就是用来处理@Autowired注解的。打开AnnotationConfigUtils的源码可以看到,

       当类中不存internalAutowiredAnnotationProcessor的时候,便会重新注册一个,并且它的类型属于AutowiredAnnotationBeanPostProcessor。

         继续看AutowiredAnnotationBeanPostProcessor类的继承图,可以看到它实现的类继承了BeanPostProcessor接口。

         之前的internalConfigurationAnnotationProcessor类也是一样的,最后发现它继承自BeanFactoryPostProcessor。

2.提前初始单例

       通过上述例子的打印可以知道,最后使用bean1对象的时候,才会创建bean1对象,默认都是延迟创建。通过主动调用beanFactory的方法,可以提前初始化单例对象。

package com.example.springdemo.demos.a21;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.annotation.AnnotationConfigUtils;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @author zhou* @version 1.0* @description TODO* @date 2025/9/21 20:46*/
public class TestBeanFactory {public static void main(String[] args) {DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();//bean的定义(class,scope,初始化,销毁)AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition(Config.class).setScope("singleton").getBeanDefinition();beanFactory.registerBeanDefinition("config",beanDefinition);//给BeanFactory一些常用的后处理器AnnotationConfigUtils.registerAnnotationConfigProcessors(beanFactory);//BeanFactory后处理器主要功能是补充一些bean的定义beanFactory.getBeansOfType(BeanFactoryPostProcessor.class).values().stream().forEach(beanFactoryPostProcessor -> {beanFactoryPostProcessor.postProcessBeanFactory(beanFactory);});//Bean后处理器beanFactory.getBeansOfType(BeanPostProcessor.class).values().forEach(beanFactory::addBeanPostProcessor);for(String name:beanFactory.getBeanDefinitionNames()){System.out.println(name);}beanFactory.preInstantiateSingletons();System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");System.out.println(beanFactory.getBean(Bean1.class).getBean2());}
}

如图所示:

       在分隔符之前就把bean1和bean2对象创建好了。

http://www.dtcms.com/a/456163.html

相关文章:

  • 网站管理过程百度怎样注册免费的网站
  • 网站营销型企业销售平台如何利用影视网站做cpa
  • 安徽和住房建设厅网站从58做网站怎么做
  • 郑州网站顾问iis服务器怎么部署php网站
  • 网站搭建就来徐州百都网络非常好建设网站联系方式
  • 唐山建设网站制作网站策划建设方案书
  • 怎么创建网站要钱吗php网站优化
  • 网站后期维护流程模板网站价格表
  • 定制网站制作平台wordpress 获取当前分类id
  • 备案网站建设方案书范文企业网站建设排名官网
  • 网站开发设计的阶段环球影城半年卡怎么预约
  • 做棋牌网站建设校园网站建设报价
  • 网站模板可视化编辑低代码建站
  • 虚拟资源站码支付wordpress网站二级菜单是什么原因
  • php网站开发教程下载新乡seo顾问
  • 公司网站建设素材购物网站静态页面
  • 请简述企业网站建设的流程seo培训课程
  • 网站建设目前流行什么公司网站建设的市场需求
  • 郑州做网站排名公司哪家好dw做的个人网站
  • 网站建设中源代码网站建设 昆山
  • 彩票资讯网站建设wordpress为用户添加积分
  • 该网站使用的安全设置wordpress调用jquery
  • 设计一个学院网站中国网站建设哪家公司好
  • 怎么用代码做网站推荐如东网站建设
  • 河北网站快速排名建设学校网站模板免费下载
  • 设计对网站的重要性建筑机械人才培训网官网
  • 网站内容的设计阿里云零基础网站建设教学
  • 在线做c 题的网站济南企业网站开发
  • 网站开发员属于谷歌chrome安卓版
  • 网站备案 价格网站关键词快速排名优化