随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

from:https://www.cnblogs.com/bossen/p/5824067.html

Bean在Spring和SpringMVC中无所不在,将这个概念内化很重要,下面分享一下我的想法:

一、Bean是啥

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

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

3、规律:凡是子类及带有方法或属性的类都要加上注册Bean到Spring IoC的注解;

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、原理是什么?先看下源码中的部分内容:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

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呢?这个我也不知道,下面我给个例子,一起探讨一下吧:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

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

Spring中Bean及@Bean的理解相关推荐

  1. java 获取spring对象数组_解析Java中如何获取Spring中配置的bean

    解析Java中如何获取Spring中配置的bean Java中如何获取Spring中配置的bean?下面是由百分网小编为大家整理的解析Java中如何获取Spring中配置的bean,喜欢的可以收藏一下 ...

  2. spring中默认标签Bean标签解析一

    在Spring种有两种标签,一种是默认标签,另一种是自定义标签.对两种标签的用法和解析方式存在着很大的不同. 首先分析的是默认标签的解析过程. 解析标签的入口代码 protected void par ...

  3. Spring 中的内部bean 和集合

    在Spring中所谓的内部bean(inner bean)是指一个bean 的<property/>或<constructor-arg/>元素中使用<bean/>元 ...

  4. Spring中注解注入bean和配置文件注入bean

    注解的方式确实比手动写xml文件注入要方便快捷很多,省去了很多不必要的时间去写xml文件 按以往要注入bean的时候,需要去配置一个xml,当然也可以直接扫描包体,用xml注入bean有以下方法: 1 ...

  5. Spring中的普通bean和工厂bean

    普通bean和工厂bean 普通bean 工厂bean(FactoryBean) Spring中有两种类型bean,一种是普通bean,另外一种是工厂bean(FactoryBean). 区别: 不同 ...

  6. 谈谈自己对Spring中IOC和AOP的理解

    Spring框架的核心思想主要是IOC和AOP的思想 IOC IOC概念 Spring中的IOC AOP AOP概念 百度百科的解释 个人理解 AOP思想 IOC IOC概念 所谓IOC即 Inver ...

  7. 对于Spring中事务的readonly属性理解

    spring中readOnly的定义,并不是不能在事务中进行修改等DML操作,它只是一个"暗示",提示数据库驱动程序和数据库系统,这个事务并不包含更改数据的操作,那么JDBC驱动程 ...

  8. Spring中把一个bean对象交给Spring容器管理的三种方式

    一.使用@Component,把bean对象依赖交给Spring容器 注意,该注解不能使用,则说明未添加依赖,需要去该项目pom.xml文件内引入依赖,若该项目只是作为一个存放工具类的子模块项目,没有 ...

  9. Spring中IoC和DI的理解

    通常情况下,Spring是学习者学完se部分马上就要面对的一个轻量级框架.实际上,Spring框架功能很强大,而IoC和AOP是两个比较重要的知识点.经过我一段时间学习感到IoC要比AOP容易理解.今 ...

  10. 【Java基础】Spring 中 Bean 的理解与使用

    大白话讲解: 从广义上 Spring 注解可以分为两类: 一类注解是用于注册 Bean 假如 IoC 容器是一间空屋子,首先这间空屋子啥都没有,我们要吃大餐,我们就要从外部搬运食材和餐具进来.这里把某 ...

最新文章

  1. 「每周CV论文推荐」 初学深度学习人脸属性分析必读的文章
  2. CVPR 2018 | 腾讯AI Lab入选21篇论文详解
  3. 【转载】C#扫盲之:==/Equals /ReferenceEquals 异同的总结,相等性你真的知道吗?
  4. 整数分解为若干项之和python_SVD奇异值分解及Python实例
  5. python写一个服务_Python写一个服务
  6. 我与CSDN的2020年
  7. r语言plotmds_多元统计分析R语言建模| 11 多维标度法MDS
  8. 用户故事与敏捷方法 - 第二章 编写故事
  9. 【STM32】IIC的基本原理(实例:普通IO口模拟IIC时序读取24C02)
  10. 数据分析的意义与必备技能
  11. jsoup爬虫发送get、post请求、解析html、获取json
  12. 微信小程序 数组 Json 导出到excel
  13. Java--多线程之并发,并行,进程,线程(一)
  14. 尚鼎峰:抖音短视频是如何在几秒钟内吸引用户观看的?
  15. 基于树莓派4b的传感器数据可视化实现
  16. MATLAB弹出对话框的使用
  17. TEC1401.Report开发技术总结 - 第九章 使用BI Publisher开发报表-使用BI Publisher创建RTF模板的语法(4/5)
  18. windows 2008 下C#调用office组件访问拒绝的解决方法(failed du
  19. JavaScript从入门到放弃到精通
  20. JAVA unusual问题收集

热门文章

  1. 使用ultraEdit 进行字符串操作技巧
  2. 京东方劝退_正式确认,华为mate40正面照来了,国行价“劝退”!
  3. alipay.trade.app.pay
  4. JavaScript手机号码摇奖
  5. mysql 周_MySQL的跨年周统计问题
  6. Log4j2远程命令执行2-vulfocus-wp
  7. 折半查找判定数及平均查找长度(一定要看这 能看懂的)
  8. SELECT后面有自定义函数的优化方法
  9. CCF推荐的中文期刊
  10. 赛门铁克:上百万 Android 应用都是恶意软件