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 ...
随机推荐
- Promise中有多个resove
return new Promise((resolve, reject) => { resolve({ status: }) if (true) { resolve({ status: }) } ...
- jekins初始化
持续交付:代码随着项目深入不断增多,不断完善,因此谓之持续交付:亦或是项目功能不断改进,修正都造成了交付活动的持续性. 好处:降低风险,尽早发现问题,单元测试通过不意味着集成测试也能通过. jenki ...
- shell小命令
小括号的用途 cd ..; ls -l (cd ..; ls -l) 如果加了括号,则当前工作目录不发生改变 shell变量类型 环境变量 可以使用 echo 或者env 例如 env|grep 变 ...
- Python之列表与元组的区别详解
相同点:都是序列类型 回答它们的区别之前,先来说说两者有什么相同之处.list 与 tuple 都是序列类型的容器对象,可以存放任何类型的数据.支持切片.迭代等操作 foos = [0, 1, 2, ...
- Acwing-169-数独2(搜索, 剪枝)
链接: https://www.acwing.com/problem/content/171/ 题意: 请你将一个16x16的数独填写完整,使得每行.每列.每个4x4十六宫格内字母A~P均恰好出现一次 ...
- MySQL-InnoDB锁(一)
本文主要记录InnoDB存储引擎中锁的关键点,下篇文章通过实例确认加锁的范围. InnoDB中的锁 1. 锁提供数据完整性和一致性 2. InnoDB行级锁:共享锁(S)和排他锁(X). 为了支持多粒 ...
- Python 爬虫十六式 - 第六式:JQuery的假兄弟-pyquery
PyQuery:一个类似jquery的python库 学习一时爽,一直学习一直爽 Hello,大家好,我是 Connor,一个从无到有的技术小白.上一次我们说到了 BeautifulSoup 美味 ...
- java 项目 文件关系 扫描 注释注入(2)
https://www.cnblogs.com/daimajun/p/7152970.html(copy) 先提一嘴 @RequestMapping(“url”),这里的 url写的是请求路径的一部分 ...
- Python3中tornado高并发框架
1.单线程tornado.web:基础web框架模块tornado.ioloop:核心IO循环模块,高效的基础.封装了:1.asyncio 协程,异步处理2. epoll模型:水平触发(状态改变就询问 ...
- AJAX-基础-1
概述 AJAX = Asynchronous JavaScript And XML(异步 JavaScript 及 XML) AJAX 是 Asynchronous JavaScript And XM ...