zoukankan      html  css  js  c++  java
  • Spring中注入bean学习的总结

    1.在类上直接加注解@Component,那么这个类就直接注入到Spring容器中了  ,像@Contrloller,@Service这些本质上都是@Component,

    2.@Configuration(或者@SpringBootConfiguration)放到类上,然后在类中的方法上加注解@Bean

    @SpringBootConfiguration
    public class UseConditionalOnBean {

    @Bean
    public User createBean(){
    return new User();
    }
    }

    当然也可以直接在类上加@Bean,这种情况就和1比较类似了

    3.@ComponentScan (在主类中,比如springboot的App.java),然后在加上@Import(Bean.class)或者@Import(BeanConfig.class)

    4.@ComponentScan (在主类中,比如springboot的App.java),然后在@EnableXXX 这个注解里也是包含有@Import,本质上还是和3一样

    再说,Bean注入Spring容器的一些回调:

    1.DefinitionRegistryPostProcessor:

    /**
    * 通过BeanDefinitionRegistryPostProcessor动态的注入bean
    * 这里的例子是一次性注入10个person的bean,并为这10个person的bean的name属性赋值了
    * BeanDefinitionRegistryPostProcessor可以拿到ConfigurableListableBeanFactory和BeanDefinitionRegistry两个对象
    * @author Joy
    *
    */

    @Component
    public class MyBeanDefinitionRegistryPostProcessor implements
    BeanDefinitionRegistryPostProcessor {

    public void postProcessBeanFactory(
    ConfigurableListableBeanFactory beanFactory) throws BeansException {

    }

    public void postProcessBeanDefinitionRegistry(
    BeanDefinitionRegistry registry) throws BeansException {
    for(int i=1;i<=10;i++){
    BeanDefinitionBuilder bdb=BeanDefinitionBuilder.rootBeanDefinition(Person.class);//这个是构造beanDefinition的
    bdb.addPropertyValue("name", "admin"+i);
    registry.registerBeanDefinition("person"+i, bdb.getBeanDefinition());
    }
    }

    }

    2.BeanFactoryPostProcessor

    /**
    * 容器初始化的回调方法
    * BeanFactoryPostProcessor在spring容器初始化之后触发,而且只会触发一次
    * 触发的时机比BeanPostProcessor早
    * @author Joy
    *
    */
    @Component
    public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
    throws BeansException {
    System.out.println("=========postProcessBeanFactory========"+ beanFactory.getBeanPostProcessorCount());
    }

    }

    3.BeanPostProcessor:

    /**
    * Bean初始化的回调方法
    * @author Joy
    *
    */

    @Component
    public class MyBeanPostProcessor implements BeanPostProcessor {

    public Object postProcessAfterInitialization(Object bean, String name)
    throws BeansException {
    System.out.println("++++++++before+++++"+bean.getClass());
    return bean;
    }

    public Object postProcessBeforeInitialization(Object bean, String name)
    throws BeansException {
    System.out.println("----------after----"+bean.getClass());
    return bean;
    }

    }

  • 相关阅读:
    python数据分析008_Matplotlib绘柱图,饼图,散点图
    python数据分析007_使用Matplotlib绘折线图
    python数据分析006_Python 2D绘图库Matplotlib
    python数据分析005_pandas的时间序列
    python数据分析004_多层索引的取值和排序
    python数据分析003_数据的合并筛选排序
    Megacli 简易使用
    k8s ingress 增加 跨域配置
    k8s 1.15 版本生产线上证书时间调整(亲测)
    grafana 展示 k8s prometheus
  • 原文地址:https://www.cnblogs.com/zhangshitong/p/7662209.html
Copyright © 2011-2022 走看看