zoukankan      html  css  js  c++  java
  • ________________初学spring3

     pring 几个扩展点

    ___________________________BeanPostProcesser___________________________

    bean初始化时触发 

    在bean依赖装配(设置完成后)完成触发

    这里可以指定Bean做一些处理,比如返回该对象的代理对象

    @Component

    public class EchoBeanPostProcesser implements BeanPostProcessor {

    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {

    System.out.println("≈≈≈≈≈≈≈≈≈>>>属性设置之后,init之前"+bean.getClass());

    if(bean instanceof User)

    return new LogUser();

    return bean;

    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {

    System.out.println("≈≈≈≈≈≈≈≈≈>>>属性设置之后,init之后"+bean.getClass());

    return bean;

    }

    }

    ___________________________BeanFactoryPostProcessor___________________________

    容器初始化时触发 

    @Component

    public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {

    System.out.println(beanFactory.getBeanDefinitionCount());

    }

    }

    BeanFactoryPostProcessor在Spring容容器初始化之后触发,且只能触发一次

    触发时机BeanPostProcessor早

    ___________________________BeanDefinitRegistryPostProcessor___________________________

    bean的静态注册

    @Component 

    public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor { 

    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {

    // TODO Auto-generated method stub

    } 

    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {

    for(int i=0;i<10;i++) {

    BeanDefinitionBuilder bdb=BeanDefinitionBuilder.rootBeanDefinition(User.class);//bean的定义BeanDefinitionBuilder

    bdb.addPropertyValue("name", "admin"+i);

    registry.registerBeanDefinition("user"+i, bdb.getBeanDefinition());

    }

    }

    }

    可以拿到ConfigurableListableBeanFactory,BeanDefinitionRegistry 两个对象

    BeanDefinitionRegistry 对象可以动态注入Bean 

    public class App {

    public static void main(String[] args) {

    AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(AnnotationScan.class);

    context.getBeansOfType(User.class).values().forEach(System.out::println);

    context.close();

    }

    }

  • 相关阅读:
    live2d 快速实现好看的看板娘特效
    JQuery 日期转换日期方法封装
    SQL Server 之 DateTime的常用方法
    C# 之DateDiff 时间差扩展方法
    SQL Server 之如何查询某数据库下的触发器和语句
    Css 设置固定表格头部,内容可滚动
    jquery 点击tr选中checkbox,解决checkbox的默认点击事件被阻止的问题
    VS切换代码自动补全模式
    C#实现软键盘的几个关键技术介绍
    C# 模拟软件键盘输入,使Winfrom窗体不获取鼠标焦点方法
  • 原文地址:https://www.cnblogs.com/qiqisx/p/9336540.html
Copyright © 2011-2022 走看看