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 ...
随机推荐
- select ... into outfile备份及恢复使用
select ... into outfile语句是一种逻辑备份的方法,更准确地说是导出一张表中的数据. Syntax:SELECT [ALL | DISTINCT | DISTINCTROW ...
- NTP服务及时间同步
环境: centos7 server 192.168.2.171 client 192.168.2.173.192.168.2.174 整体思路:173.174同步171的时间,171定时同 ...
- HDFS知识点
1.通过代码验证集群的配置文件的优先级 HDFS文件上传 1.编写源代码 @Test public void testCopyFromLocalFile() throws IOException, I ...
- MariaDB安装与使用
下载地址:https://downloads.mariadb.org/ 下载相对应的电脑版本程序 等待下载完成...... 安装教程: 双击运行 设置数据库的密码 等待安装完成.. 这样就完成安装了. ...
- Python 读写XML文件
Python 生成XML文件 from xml.dom import minidom # 生成XML文件方式 def generateXml(): impl = minidom.getDOMImple ...
- redis实现排行榜功能
目录 加入排行榜 操作排行榜 redis的zset可以很方便地用来实现排行榜功能,下面简单介绍python如何使用redis实现排行榜功能 加入排行榜 获取redis实例 import redis m ...
- Vue: 购物车数量加减按钮
效果图: HTML: <div class="label"> <p class="buy_num">购买数量</p> < ...
- linux安装locust及遇到的坑
安装locust很简单,简单的我以为pip install一下就好了,结果运行locust死活不行,后来的后来,,才搞清楚还要进行以下操作. 前提: 1.已安装Python3和pip3(或者都是2,版 ...
- html5原生js拖拽上传(golang版)
一次只能传一个文件,需在main.go同级目录中建一个upload文件夹 main.go package main import ( "fmt" "io" &q ...
- 两列布局实现各自独立滚屏,类似与 scrollNav 的功能。
现在移动端 web 开发越来越靠近 app 的功能.所以两列布局各自都能实现独立滚动也常见.基于固定侧边栏导航,另一侧实现内容展示. 这个功能的核心在于使用 vh 单位. 其中 CSS 的代码是核心点 ...