spring注解驱动开发(BEAN注册方式与生命周期)

news/2024/10/27 22:29:56/

目录

容器中注册BEAN的方式

BEAN生命周期


容器中注册BEAN的方式

  1. 包扫描+组件标注注解
    @ComponentScan(basePackages = {"com.an.spring.condition"})
    @Service
    @Component
    @Controller
    @Repository
  2. @BEan方式【导入第三方包里面的组件】
    @ComponentScan(basePackages = {"com.an.spring.condition"})
    public class ConditionConifg extends BaseConfig {@Bean@Conditional(WindowsCondition.class)public ListService wl() {return new WindowsListService();}
    }
  3. @Import快速给容器中导入一个组件。
    @Import({ColorBlue.class, MyImportSelector.class, 
    MyImportBeanDefinitionRegistrar.class})
    

    1)、@IMport(要导入到容器中的组件),容器就会注入这个组件,默认BEAN在容器中的ID为类的全类名。
    @ComponentScan(basePackages = {"com.an.spring.condition"})
    @Import(ColorBlue.class)
    public class ConditionConifg extends BaseConfig {}效果:
    当前容器中Bean: com.an.spring.other.ColorBlue
    

    2)、在Import注解中类实现org.springframework.context.annotation.ImportSelector接口,返回需要导入的类全名数组。

    public class MyImportSelector implements ImportSelector {/*** 返回值,就是导入到容器中的组件的全类名。** @param importingClassMetadata:当前标注@Import注解的类的所有注解信息* @return 导入到容器中的组件的全类名【不可返回null】*/@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {System.out.println("MyImportSelector: " + importingClassMetadata.getClassName());return new String[]{"com.an.spring.other.ColorRed"};}
    }

    3)、在Import注解中类实现org.springframework.context.annotation.ImportBeanDefinitionRegistrar接口,手动注册BEAN到容器中。
     

    public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {/*** 注册BEAN** @param importingClassMetadata 当前类的注解信息* @param registry 通过调用BeanDefinitionRegistry#registerBeanDefinition(java.lang.String,*                org.springframework.beans.factory.config.BeanDefinition)方法注册BEAN*/@Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {ImportBeanDefinitionRegistrar.super.registerBeanDefinitions(importingClassMetadata, registry);RootBeanDefinition beanDefinition = new RootBeanDefinition();beanDefinition.setBeanClass(ColorGreen.class);registry.registerBeanDefinition("rabinoooxx", beanDefinition);}
    }

  4. 使用Spring提供的org.springframework.beans.factory.FactoryBean(工厂BEAN)注册BEAN。
    BEAN定义与配置:
    @ComponentScan(basePackages = {"com.an.spring.condition"})
    @Import({ColorBlue.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class})
    public class ConditionConifg extends BaseConfig {@Beanpublic MyFactoryBean myFactoryBean() {return new MyFactoryBean();}
    }
    FactoryBean配置:
    package com.an.spring.condition;import com.an.spring.other.RainBow;
    import org.springframework.beans.factory.FactoryBean;public class MyFactoryBean implements FactoryBean<RainBow> {// 返回对象,这个会被添加到容器中@Overridepublic RainBow getObject() throws Exception {return new RainBow();}@Overridepublic Class<?> getObjectType() {return RainBow.class;}// 是否单例@Overridepublic boolean isSingleton() {return FactoryBean.super.isSingleton();}
    }
    

    获取FactoryBEAN的方式与特点:
    System.out.println("=====Spring提供的工厂BEAN对象获取:======");
    System.out.println("获取工厂BEAN本身:" + context.getBean("&myFactoryBean"));
    System.out.println("获取工厂BEAN,getObject()方法返回的对象:" + context.getBean("myFactoryBean"));
    

BEAN生命周期


http://www.ppmy.cn/news/216195.html

相关文章

php获取文件的权限信息(获取权限信息、返回字符串涵义、二进制的转换方式、权限修改)

php获取文件的权限信息 说明1.获取文件的权限信息2.返回文件权限字符的解读3.转为二进制权限4.修改权限 说明 &#xff08;图片来源于网络&#xff09; 文件权限是指文件或目录对用户和其他进程的访问许可。在 Unix 和 Linux 系统中&#xff0c;文件和目录都有三个权限&#x…

【Web】云安全之元数据服务

前言 最近再挖SRC的时候&#xff0c;遇到了一处疑似SSRF的接口&#xff0c;并且尝试访问元数据服务&#xff0c;通的&#xff0c;但由于之前接触的较少&#xff0c;暂时没有思路&#xff0c;所以有了如下的文章。 本文详细介绍了元数据相关的一些知识点&#xff0c;以及如何通…

法规标准-UN R158标准解读

UN R158是做什么的&#xff1f; UN R158全名为针对驾驶员识别车辆后方弱势道路使用者&#xff0c;联合国对倒车系统和机动车的统一规定&#xff0c;该法规涉及批准倒车和机动车辆的装置&#xff0c;主要为保证倒车时避免碰撞&#xff0c;方便驾驶员观察了解车辆后部人员和物体…

完美解决小米笔记本风扇乱转的问题

在平衡模式下更改高级电源设置--->处理器电源管理--->最大出来状态 改成88%,或者改成低于88%; 转载于:https://my.oschina.net/u/1385936/blog/1815100

笔记本风扇声音大(处理器电源管理)

首先打开控制面板&#xff0c;打开“电源选项”&#xff0c; 点击“更改计划设置”&#xff0c; 点击“更改高级电源设置”&#xff0c; 点击“处理器电源管理”前的号&#xff0c; 系统散热方式全部改为“被动”&#xff0c; 最大处理器状态改99%。 Tips&#xff1a;如果没有…

戴尔笔记本——减低风扇声音的一种办法

1.在windows搜索框中&#xff0c;搜索Dell Power Manager&#xff0c;并打开其软件。 2.打开“散热管理”&#xff0c;选中“静音模式”&#xff0c;这样就可以长期风扇声音小了。若想让电脑风扇声音瞬间消失&#xff0c;则可以选择“疾速模式”&#xff0c;但这种模式下&…

笔记本更换散热风扇及硅胶

注意事项&#xff1a; 1&#xff1a;拆机更换有开不了机的风险 2&#xff1a;一定要单买导热系数高的散热硅胶 一&#xff1a;买一对风扇&#xff0c;cpu跟显卡散热风扇一对。 二&#xff1a;买散热系数高的硅胶&#xff0c;不要用送的 三&#xff1a;拆机更换 四&#xf…

笔记本计算机风扇声音大怎么办,教你怎么从解决笔记本风扇狂转、噪音过大!-电脑风扇声音大怎么办...

我刚买了战神Z7-KP7D1回来&#xff0c;但是刚买回来遇到问题&#xff0c;最不满的就是间歇性发作的风扇&#xff0c;这几天自己测试了许多方法终于总结出来。 1.如何从软件上解决风扇噪音过大的问题&#xff1a;首先最重要的是保证你的风扇没有物理上的问题(磨损、异响等)&…