引言

最近在腾讯课堂上学习了spring框架bean的注册(注解形式),为此整理下知识点,方便过后温习,并巩固等。也希望能帮助你们。

核心配置类:

创建核心配置类,需要在类上加上注解@Configuration,配置类可以有多个,相当于spring的xml配置文件,我们想注册的bean都会通过配置类注册进spring的ioc容器,具体实现如下:

package com.jym.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import com.jym.bean.Person;@Configuration
public class JymConfig {}
第一种方式注册bean:

使用@bean注解: @bean注解是最简单的一种注册方式,具体实现方式:
实体类preson:

public class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public Person() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + "]";}  }

配置类 注意:这里的beanid 默认为方法名!!!

@Configuration
public class JymConfig {@Beanpublic Person person(){return new Person("jym",20);}}

测试类:

 //获得spring的上下文工具ApplicationContext app = new AnnotationConfigApplicationContext(JymConfig.class);//获取beanPerson person = (Person) app.getBean("person");System.out.println(person);

优点:简单明了
缺点:当有很多bean需要注册的时候 代码过多

第二种方式注册bean:

使用扫描包注解@ComponentScan 有个属性value 后面写上需要扫描的包名,在spring容器初始化的时候,就会把包下类上加 @Componen, @Repository ,@Service ,@Controller的类都注册进ioc容器中
这是最常用的一种注册bean的方式

@Configuration
@ComponentScan(value="com.jym.interfaceBean")
public class JymConfig {@Beanpublic Person person(){return new Person("jym",20);}}
第三种方式注册bean:

@Import注解 注册的一个或多个bean。
具体实现:
配置类:

@Configuration
@Import(value = { Dog.class,Monkey.class})
//@ComponentScan(value="com.jym.interfaceBean")
public class JymConfig {@Beanpublic Person person(){return new Person("jym",20);}}

测试类代码:

    ApplicationContext app = new   AnnotationConfigApplicationContext(JymConfig.class);//获得ioc容器的所有bean idString[] str = app.getBeanDefinitionNames();for (int i = 0; i < str.length; i++) {System.out.println(str[i]);}

结果:

根据测试结果能看出 需要创建的bean已经在ioc容器中
通过这种方式注册的bean ,ID为类的包名.类名

第四种方式注册bean:

实现 ImportSelector接口
具体实现方式:

  1. 先创建实现类,并重写方法
package com.jym.interfaceBean;import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;public class JymImportSelector implements ImportSelector{@Overridepublic String[] selectImports(AnnotationMetadata arg0) {return new String[]{"com.jym.bean.Cat"};}}

2.将实现类配置到配置类中:

@Configuration
@Import(value = { Dog.class,Monkey.class,JymImportSelector.class})
//@ComponentScan(value="com.jym.interfaceBean")
public class JymConfig {@Beanpublic Person person(){return new Person("jym",20);}}

测试代码跟上面的一样
结果为:

这种方式也可以配置多个bean

第五种方式注册bean:

使用场景 当ioc容易存在某一个bean的时候 就注册另一个bean
实现ImportBeanDefinitionRegistrar接口注册
具体实现(与ImportSelector步骤相同):

package com.jym.interfaceBean;import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.stereotype.Component;import com.jym.bean.Monkey;
@Component
public class JymBeanDefinitionRegistry implements ImportBeanDefinitionRegistrar{/*** AnnotationMetadata 当前注册类的注解信息* BeanDefinitionRegistry  BeanDefinition注册类*/@Overridepublic void registerBeanDefinitions(AnnotationMetadata arg0, BeanDefinitionRegistry arg1) {boolean bean1 = arg1.containsBeanDefinition("com.jym.bean.Cat");boolean bean2 = arg1.containsBeanDefinition("com.jym.bean.Dog");//如果同时存在cat dog 类  就注册monkeyif(bean1&&bean2){RootBeanDefinition beanDefinition = new RootBeanDefinition(Monkey.class);arg1.registerBeanDefinition("monkey", beanDefinition);}}}

配置类:

package com.jym.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;import com.jym.bean.Dog;
import com.jym.bean.Monkey;
import com.jym.bean.Person;
import com.jym.interfaceBean.JymImportSelector;@Configuration
@Import(value = { Dog.class,Monkey.class,JymImportSelector.class})
@ComponentScan(value="com.jym.interfaceBean")
public class JymConfig {@Beanpublic Person person(){return new Person("jym",20);}}

结果:

根据结果可见 我们的Monkey也在IOC容器中

感谢您的观看!!

spring框架学习总结(非xml方式注册bean)相关推荐

  1. spring bean xml 调用方法_Spring通过Xml方式注册Bean的几处关键实现点

    1.前言 我们用SpringMVC的时候一般会用到Xml配置文件,那么我们这篇文章就来谈下Spring读取Xml配置文件的一些关键实现点. 2.AbstractRefreshableApplicati ...

  2. Spring框架学习笔记---完结

    一.简介 Spring:春天----->给软件行业带来了春天 2002年,Rod Jahnson首次推出了Spring框架雏形interface21框架. 2004年3月24日,Spring框架 ...

  3. Spring框架学习路线

    文章目录 1.Spring 1.1.简介 1.2.优点 1.3.扩展 2.IOC理论 2.1.IOC的创建对象的方法 3.Spring配置 3.1.Bean配置 3.2.import 4.依赖注入 4 ...

  4. Spring框架学习笔记,超详细!!(4)

    Java小白开始学习Spring框架,一方面,跟着视频学习,并记录下学习笔记,方便以后复习回顾.另一方面,发布学习笔记来约束自己,学习路程还很遥远,继续加油坚持!!!希望能帮助到大家! 另外还有我的牛 ...

  5. Spring框架学习(二)

    Spring框架学习笔记---->AOP AOP概念 AOP:aspect oriented programing,面向切面编程. 将软件的各个模块,按照横向的角度进行观察,发现各个模块之间存在 ...

  6. Spring框架学习笔记(三)(AOP,事务管理)

    Spring框架学习笔记(三) 九.AOP 9.1 AOP的注解配置 (1) 新建计算器核心功能(模拟:不能在改动核心代码) (2) 建立一个普通的Java类写增强代码(面向切面编程),使用Sprin ...

  7. IOC操作Bean管理XML方式(bean的作用域)

    目录 IOC操作Bean管理XML方式(bean的作用域) 1.在Spring 里面,设置创建 bean 实例是单实例还是多实例的方式 (1)在Spring 配置文件bean 标签里面有属性(scop ...

  8. IOC操作Bean管理XML方式(bean 的生命周期)

    目录 IOC操作Bean管理XML方式(bean 的生命周期) 1.bean 的生命周期(在单例模式下的生命周期) (1)通过构造器创建 bean 的实例(执行类中无参构造方法去创建对象) (2)为 ...

  9. Spring框架学习教程,详解Spring注入bean的几种方式

    首先,要学习Spring中的Bean的注入方式,就要先了解什么是依赖注入. 依赖注入是指:让调用类对某一接口的实现类的实现类的依赖关系由第三方注入,以此来消除调用类对某一接口实现类的依赖. Sprin ...

  10. Spring框架学习(四):聊一聊xml配置和Java配置

    之前的例子在演示过程中直接使用了xml的配置方式,对于刚刚接触Spring的同学来说肯定也是蒙圈的.这篇我们就从配置开始聊起. 在开发过程中,程序员通常使用这两种方式进行Spring的配置: 基于XM ...

最新文章

  1. 皮一皮:来看看你是哪一档...
  2. 你是一个合格的数据分析师吗?教你如何提升自己的product sense?
  3. Redis事务中的watch机制-从实例入手学习
  4. ESP8266等模块
  5. 【DP】【树状数组】方伯伯的玉米田/优美玉米(luogu 3287/金牌导航 数据结构优化DP-5)
  6. 【机器学习】 LightGBM——优于XGBoost提升的集成算法(安装+对比XGBoost改进+参数说明+python代码实例)
  7. IDEA中的HTTP Client Editor测试API
  8. Oracle 表的连接方式(1)-----Nested loop join和 Sort merge join
  9. php判断简写,怎么简写php 中的三元运算符
  10. BiquadFilterNode
  11. 用英伟达Jetson Nano运行PyTorch Fast.ai丨手把手教程+第三方工具
  12. 计算机网络 时延、发送时延、传输时延、处理时延、排队时延、时延带宽积
  13. php伪类,CSS3新增伪类
  14. 笔记5 bean的作用域
  15. C++技术之一:C++类 _stdcall
  16. C++描述 LeetCode 112. 路径总和
  17. 445端口telnet不通经验总结
  18. python水果超市管理系统_java实现水果超市管理系统
  19. 如何同时登陆局域网和互联网?
  20. 财路网每日原创推送:混迹币圈必看,吐血推荐!

热门文章

  1. springboot权限管理系统
  2. serialVersionUID
  3. 【运维有小邓】日志分析软件 - EventLog Analyzer
  4. PostgreSQL12中文手册
  5. 利用modem发传真
  6. 【从Northwind学习数据库】汇总查询
  7. c语言实验报告评语大全,实验报告总结
  8. 易飞ERP PLM集成 解决方案
  9. 自行设计开源的pdf转word软件(python开发设计)
  10. 2020山东大学软件测试期末试题