当前位置: 首页 > news >正文

component是什么接口_Spring Bean是什么

7775655243942145522348856339afee.png

一、Bean是啥

1、Java面向对象,对象有方法和属性,那么就需要对象实例来调用方法和属性(即实例化);

2、凡是有方法或属性的类都需要实例化,这样才能具象化去使用这些方法和属性;

3、规律:凡是子类及带有方法或属性的类都要加上注册Bean到Spring IoC的注解;(@Component , @Repository , @ Controller , @Service , @Configration)

4、把Bean理解为类的代理或代言人(实际上确实是通过反射、代理来实现的),这样它就能代表类拥有该拥有的东西了

5、我们都在微博上@过某某,对方会优先看到这条信息,并给你反馈,那么在Spring中,你标识一个@符号,那么Spring就会来看看,并且从这里拿到一个Bean(注册)或者给出一个Bean(使用)

二、注解分为两类:

1、一类是使用Bean,即是把已经在xml文件中配置好的Bean拿来用,完成属性、方法的组装;比如@Autowired , @Resource,可以通过byTYPE(@Autowired)、byNAME(@Resource)的方式获取Bean;

2、一类是注册Bean,@Component , @Repository , @ Controller , @Service , @Configration这些注解都是把你要实例化的对象转化成一个Bean,放在IoC容器中,等你要用的时候,它会和上面的@Autowired , @Resource配合到一起,把对象、属性、方法完美组装。

三、@Bean是啥?

1、原理是什么?先看下源码中的部分内容:

Indicates that a method produces a bean to be managed by the  Spring container.      <h3>Overview</h3>      <p>The names and semantics of the  attributes to this annotation are intentionally   similar to those of the {@code <bean/>}  element in the Spring XML schema. For   example:      <pre class="code">       @Bean       public MyBean  myBean() {           //  instantiate and configure MyBean obj           return obj;      }</pre>

意思是@Bean明确地指示了一种方法,什么方法呢——产生一个bean的方法,并且交给Spring容器管理;从这我们就明白了为啥@Bean是放在方法的注释上了,因为它很明确地告诉被注释的方法,你给我产生一个Bean,然后交给Spring容器,剩下的你就别管了。

2、记住,@Bean就放在方法上,就是产生一个Bean,那你是不是又糊涂了,因为已经在你定义的类上加了@Configration等注册Bean的注解了,为啥还要用@Bean呢?这个我也不知道,下面我给个例子,一起探讨一下吧:

package com.edu.fruit;    //定义一个接口      public interface Fruit<T>{          //没有方法  }     /*  *定义两个子类  */  package com.edu.fruit;       @Configuration       public class Apple implements Fruit<Integer>{//将Apple类约束为Integer类型     }     package com.edu.fruit;       @Configuration       public class GinSeng implements Fruit<String>{//将GinSeng 类约束为String类型     }  /*  *业务逻辑类  */  package com.edu.service;         @Configuration         public class FruitService  {            @Autowired            private Apple  apple;            @Autowired            private GinSeng  ginseng;      //定义一个产生Bean的方法         @Bean(name="getApple")         public Fruit<?>  getApple(){         System.out.println(apple.getClass().getName().hashCode);           System.out.println(ginseng.getClass().getName().hashCode);         return new Apple();  }  }  /*  *测试类  */  @RunWith(BlockJUnit4ClassRunner.class)  public class Config {      public Config(){          super("classpath:spring-fruit.xml");      }      @Test      public void test(){          super.getBean("getApple");//这个Bean从哪来,从上面的@Bean下面的方法中来,返回                                                            的是一个Apple类实例对象                 }  }

从上面的例子也印证了我上面的总结的内容:

1、凡是子类及带属性、方法的类都注册Bean到Spring中,交给它管理;

2、@Bean 用在方法上,告诉Spring容器,你可以从下面这个方法中拿到一个Bean

我这儿整理了比较全面的JAVA相关的面试资料,

545efb781c78658461be96040dcd563e.png

需要领取面试资料的同学,请加群:473984645

62960c8ebf5ae3d9d48810e62171f7f6.png

相关文章:

  • wpf textbox垂直对齐方式_果冻公开课第九课:打破传统布局方式的flex(上)
  • 4路组相连cache设计_写了多年代码,你却不知道的程序设计的5个底层逻辑
  • python爬取网页文本_python2、python3 伪装浏览器爬取网页内容的简单示例
  • idea html代码提示_Java后端精选基础教程:使用开发工具 IDEA「连载 4」
  • 各路由协议的协议号_离婚协议范本!
  • python按行拆分表格_Python对Excel按列值筛选并拆分表格到多个文件的代码
  • easyui datagrid重新加载detailview异常_tomcat类加载机制了解一下
  • 关于python格式对齐的问题_python格式对齐
  • css清除浮动的几种方法_小猿圈之HTML/css清除浮动的方法都有哪些?
  • python初学者编程指南源码_如何系统地自学 Python?
  • sublime编辑python_Sublime配置python开发环境
  • python快速入门naomiceder_零基础小白python入门必看之Cartopy的基础使用
  • 为什么写了value属性 jq赋值value值不显示_Vue计算属性原理和使用场景
  • python什么为假_在Python中使用filter去除列表中值为假及空字符串的例子
  • php不调用父类构造_popchain与对应poc的构造分析
  • 【翻译】babel对TC39装饰器草案的实现
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • Angular 响应式表单之下拉框
  • chrome扩展demo1-小时钟
  • DOM的那些事
  • JavaScript 基础知识 - 入门篇(一)
  • Nodejs和JavaWeb协助开发
  • Redis 中的布隆过滤器
  • Web标准制定过程
  • 大数据与云计算学习:数据分析(二)
  • 动态魔术使用DBMS_SQL
  • 基于Android乐音识别(2)
  • 学习笔记:对象,原型和继承(1)
  • 责任链模式的两种实现
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • ​2020 年大前端技术趋势解读
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • "无招胜有招"nbsp;史上最全的互…
  • $GOPATH/go.mod exists but should not goland
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (7)STL算法之交换赋值
  • (java)关于Thread的挂起和恢复
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (论文阅读30/100)Convolutional Pose Machines
  • (十)c52学习之旅-定时器实验
  • (算法设计与分析)第一章算法概述-习题
  • (一)WLAN定义和基本架构转
  • .net framework 4.0中如何 输出 form 的name属性。
  • .Net FrameWork总结
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • /proc/vmstat 详解
  • @Async注解的坑,小心
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @WebServiceClient注解,wsdlLocation 可配置
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [20171106]配置客户端连接注意.txt
  • [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)
  • [Angular] 笔记 18:Angular Router
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)