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 给容器中注册组件的几种方式的更多相关文章

  1. spring给容器中注入组件的几种方式

    目录 环境搭建 spring给容器中注入组件 1.包扫描+组件标注注解(@Controller/@Service/@Repository/@Component)适用于把自己写的类加入组件(默认ID类名 ...

  2. Spring注解驱动开发04(给容器中注册组件的方式)

    给容器中注册组件的方式 1. 组件注解标注 + 包扫描(适用于自己写的类) //控制层组件 @Controller public class PersonController { } //业务逻辑层组 ...

  3. 2、组件注册-@Configuration&@Bean给容器中注册组件

    2.组件注册-@Configuration&@Bean给容器中注册组件 2.1 创建maven项目 spring-annotation pom.xml文件添加 spring-context 依 ...

  4. Spring第二天,你必须知道容器注册组件的几种方式!学废它吊打面试官!

    ​ 前一篇<不要再说不会Spring了!Spring第一天,学会进大厂!>文章可点击下方链接进行回看. 不要再说不会Spring了!Spring第一天,学会进大厂! 今天将继续讲解Spri ...

  5. 向Spring容器中注册组件的方法汇总小结

    1.通过xml定义 <bean class=""> <property name="" value=""></ ...

  6. spring注解开发:容器中注册组件方式

    1.包扫描+组件标注注解 使用到的注解如下,主要针对自己写的类 @Controller @Service @Repository @Component @ComponentScan 参考 spring ...

  7. 【Spring注解开发】组件注册-使用@Configuration和@Bean给容器中注册组件

    写在前面 在之前的Spring版本中,我们只能通过写XML配置文件来定义我们的Bean,XML配置不仅繁琐,而且很容易出错,稍有不慎就会导致编写的应用程序各种报错,排查半天,发现是XML文件配置不对! ...

  8. 一、Spring之组件注册-@Configuration&@Bean给容器中注册组件

    xml配置方式 首先我们创建一个实体类Person public class Person { private String name; private Integer age; private St ...

  9. spring给容器注册组件 的几种方式

    环境搭建: 新建一个maven项目,引入依赖 <dependency> <groupId>org.springframework</groupId> <art ...

随机推荐

  1. Ubuntu下python开发环境搭建

    配置语言 1) 依次点击设置--Region & Language--Manage Installed Languages --install/remove language--chinese ...

  2. MySQL(MariaDB)默认密码和修改方法

    由于笔者只测试过Ubuntu 16.04.4.Ubuntu 19.04和Debian 9,此方法不确定在其他版本下适用. 本文章介绍的方法同样适用于这样的错误信息. ➜ ~ mysql -u root ...

  3. CodeForces 788B - Weird journey [ 分类讨论 ] [ 欧拉通路 ]

    题意: 给出无向图. good way : 仅有两条边只经过一次,余下边全经过两次的路 问你共有多少条不同的good way. 两条good way不同仅当它们所经过的边的集合中至少有一条不同 (很关 ...

  4. Python之multiprocessing模块的使用

    作用:Python多进程处理模块,解决threading模块不能使用多个CPU内核,避免Python GIL(全局解释器)带来的计算瓶颈. 1.开启多进程的简单示例,处理函数无带参数 #!/usr/b ...

  5. (已解决)FVDI 2018“连接到服务器.....失败”“打不开设备”

    FVDI 2018 错误和解决方案来自网站:eobdtool.co.uk FVDI 2018发现以下错误: “连接到服务器.....失败” “设备未打开” 解决方案: 请下载FDVI 2018 V3. ...

  6. 4、路由事件 RoutedEvent

    路由事件的类型:具体参考https://www.cnblogs.com/jellochen/p/3475754.html Tunnel隧道方式:路由事件使用隧道策略,以便事件实例通过树向下路由(从根到 ...

  7. JVM(四),什么是反射

    四.什么是反射 1.反射理论 2.反射实践 (1)创建Robot类 public class Robot { private String name; public void sayHi(String ...

  8. JavaWeb-SpringSecurity使用短信验证码登陆

    相关博文 JavaWeb-SpringBoot_一个类实现腾讯云SDK发送短信 传送门 系列博文 项目已上传至guthub 传送门 JavaWeb-SpringSecurity初认识 传送门 Java ...

  9. Python中很少见的用法

    print(*range(10)) # 自动解开可迭代的对象

  10. flask 第四篇 模板语言jinja2

    是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...