spring 给容器中注册组件的几种方式
1.@Bean 导入第三方的类或包的组件
2.包扫描+组件的标注注解(@ComponentScan: @Controller,@service,@Reponsitory,@Componet), 自己写的类
3.@Import[可以快速给容器中导入一个或者多个组件]
1@Import(要导入到容器中的组件):容器中就会自动注册这个组件,id默认是全类名
@Configuration
@Import(value = {Student.class,Teacher.class})
public class MainConfig {
}
2 ImportSelector:返回需要导入的组件的全类名数组
实现ImportSelector接口类
public class TestImportSelector implements ImportSelector {
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[]{"cn.qin.bean.Student","cn.qin.bean.Teacher"};
}
}
配置类
@Configuration
@Import(value = {TestImportSelector.class})
public class MainConfig { }
3 ImportBeanDefinitionRegistrar:手动注册bean到容器中
实现接口类
public class TestImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
/***
* AnnotationMetadata 当前类注解信息
* BeanDefinitionRegistry BeanDefinition 注册类
把所有需要添加到容器中的bean加入
*/
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
//如果容器中存在Student 则注入Teacher
if(registry.containsBeanDefinition("Student"))
{
//对Teacher进行封装
RootBeanDefinition beanDefinition=new RootBeanDefinition(Teacher.class);
//注册Teacher
registry.registerBeanDefinition("Teacher",beanDefinition);
}
}
}
配置类
@Configuration
@Import(value = {TestImportBeanDefinitionRegistrar})
public class MainConfig { }
4 使用spring提供的FactoryBean(工厂Bean) 注册
实现接口类
public class TestFactoryBean implements FactoryBean<Person> {
//获取对象
public Person getObject() throws Exception {
return new Person();
}
//获取对象类型
public Class<?> getObjectType() {
return Person.class;
}
//是否单例
public boolean isSingleton() {
return true;
}
}
配置类 这里用@bean 方式注入
@Configuration
public class MainConfig { @Bean
public TestFactoryBean testFactoryBean(){
return new TestFactoryBean();
} }
Object object1=context.getBean("testFactoryBean");//默认获取到的是工厂bean调用getObject创建的对象
Object object2=context.getBean("&testFactoryBean");//要获取工厂Bean本身,我们需要给id前面加一个&
spring 给容器中注册组件的几种方式的更多相关文章
- spring给容器中注入组件的几种方式
目录 环境搭建 spring给容器中注入组件 1.包扫描+组件标注注解(@Controller/@Service/@Repository/@Component)适用于把自己写的类加入组件(默认ID类名 ...
- Spring注解驱动开发04(给容器中注册组件的方式)
给容器中注册组件的方式 1. 组件注解标注 + 包扫描(适用于自己写的类) //控制层组件 @Controller public class PersonController { } //业务逻辑层组 ...
- 2、组件注册-@Configuration&@Bean给容器中注册组件
2.组件注册-@Configuration&@Bean给容器中注册组件 2.1 创建maven项目 spring-annotation pom.xml文件添加 spring-context 依 ...
- Spring第二天,你必须知道容器注册组件的几种方式!学废它吊打面试官!
前一篇<不要再说不会Spring了!Spring第一天,学会进大厂!>文章可点击下方链接进行回看. 不要再说不会Spring了!Spring第一天,学会进大厂! 今天将继续讲解Spri ...
- 向Spring容器中注册组件的方法汇总小结
1.通过xml定义 <bean class=""> <property name="" value=""></ ...
- spring注解开发:容器中注册组件方式
1.包扫描+组件标注注解 使用到的注解如下,主要针对自己写的类 @Controller @Service @Repository @Component @ComponentScan 参考 spring ...
- 【Spring注解开发】组件注册-使用@Configuration和@Bean给容器中注册组件
写在前面 在之前的Spring版本中,我们只能通过写XML配置文件来定义我们的Bean,XML配置不仅繁琐,而且很容易出错,稍有不慎就会导致编写的应用程序各种报错,排查半天,发现是XML文件配置不对! ...
- 一、Spring之组件注册-@Configuration&@Bean给容器中注册组件
xml配置方式 首先我们创建一个实体类Person public class Person { private String name; private Integer age; private St ...
- spring给容器注册组件 的几种方式
环境搭建: 新建一个maven项目,引入依赖 <dependency> <groupId>org.springframework</groupId> <art ...
随机推荐
- Vim常用插件命令手册
此文章记录了,笔者使用的插件中的主要命令. junegunn/vim-plug :PlugInstall 安装插件 :PlugClean 清理插件 :PlugUpgrade 升级插件管理器 :Plug ...
- 【Andriod-AlertDialog控件】 弹出对话框AlertDialog用法
Result: Code: import android.app.Activity; import android.app.AlertDialog; import android.content.Di ...
- 【leetcode】1286. Iterator for Combination
题目如下: Design an Iterator class, which has: A constructor that takes a string characters of sorted di ...
- 用bootstrap写一个登陆页
<div class="container"> <p class="text-center marginTop35">后台管理系统< ...
- 26.Python三目运算符(三元运算符)用法详解
Python 可通过 if 语句来实现三目运算符的功能,因此可以近似地把这种 if 语句当成三目运算符.作为三目运算符的 if 语句的语法格式如下: True_statements if expres ...
- 开源!js实现微信/QQ直接跳转到支付宝APP打开口令领红包!附:demo
最近支付宝的领红包可真是刷爆了各个微信群啊,满群都是支付宝口令. 可是这样推广可不是办法,又要复制又要打开支付宝又要点领取,太麻烦了. 于是乎,提出了一个疑问!是否可以在微信里面点一个链接然后直接打开 ...
- grep命令和tail命令
写在前面的话: 最近参与了新项目开发,周期短,与自己负责的主要业务对接.业务复杂,时常出现bug,然额对于菜鸟的我,更是无从下手.其实最好的帮助就是 学会查看日志,关键是之前查看日志真是太少了,菜鸟一 ...
- mysql删除数据库所有表
-- 生成删除xxx数据库的所有表的sql语句SELECT CONCAT('drop table ',table_name,';') FROM information_schema.`TABLES` ...
- js字符串常用函数
字符截取函数 1. array.slice(start, end) 第一个参数代表开始位置,第二个参数代表结束位置的下一个位置 start:规定从何处开始选取. 如果是负数,那么它规定从数组尾部开始算 ...
- 【React自制全家桶】五、React组件的生命周期函数详解
一.总览React组件的生命周期函数 什么是生命周期函数:简单的来说就是 在某个时刻会自动执行的函数 二.React的生命周期函数主要由四块组成 分别是:组件初始化.组件挂载.组件更新.组件卸载 三. ...