Bean在Spring和SpringMVC中无所不在
Spring帮助我们管理Bean分为两个部分,
一个是注册Bean,
一个装配Bean。
完成这两个动作有三种方式,
一种是使用自动配置的方式、
一种是使用JavaConfig的方式,
一种就是使用XML配置的方式。
在自动配置的方式中,使用@Component去告诉Spring,我是一个bean,你要来管理我,然后使用@AutoWired注解去装配Bean(所谓装配,就是管理对象直接的协作关系)。
然后在JavaConfig中,@Configuration其实就是告诉spring,spring容器要怎么配置(怎么去注册bean,怎么去处理bean之间的关系(装配))。那么久很好理解了,@Bean的意思就是,我要获取这个bean的时候,你spring要按照这种方式去帮我获取到这个bean。
到了使用xml的方式,也是如此。君不见<bean>标签就是告诉spring怎么获取这个bean,各种<ref>就是手动的配置bean之间的关系。
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 |
|
意思是@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 |
|
从上面的例子也印证了我上面的总结的内容:
1、凡是子类及带属性、方法的类都注册Bean到Spring中,交给它管理;
2、@Bean 用在方法上,告诉Spring容器,你可以从下面这个方法中拿到一个Bean
Bean在Spring和SpringMVC中无所不在相关推荐
- cdi 2.7.5_集成测试CDI 1.0和Spring 3.1中的作用域bean
cdi 2.7.5 在这篇博客文章中,我描述了如何在Spring和CDI中使用作用域bean进行集成测试. 一切都用小代码示例进行说明. 使用范围进行集成测试并不是特别容易. 想象一下存在于会话范围内 ...
- 集成测试CDI 1.0和Spring 3.1中的作用域bean
在这篇博客文章中,我描述了如何在Spring和CDI中使用作用域bean进行集成测试. 一切都用小代码示例进行说明. 使用范围进行集成测试并不是特别容易. 想象一下存在于会话范围内的bean,例如Us ...
- [转]spring入门(六)【springMVC中各数据源配置】
在使用spring进行javaWeb开发的过程中,需要和数据库进行数据交换,为此要经常获取数据库连接,使用JDBC的方式获取数据库连接,使用完毕之后再释放连接,这种过程对系统资源的消耗无疑是很大的,这 ...
- Spring和SpringMVC父子容器关系初窥
一.背景 最近由于项目的包扫描出现了问题,在解决问题的过程中,偶然发现了Spring和SpringMVC是有父子容器关系的,而且正是因为这个才往往会出现包扫描的问题,我们在此来分析和理解Spring和 ...
- spring和springMVC配置文件中的扫描包如何配置
我的项目大概文件路径: 然后进入主题: spring的配置文件名称为applicationContext.xml springMVC的配置文件名称为dispatcherServlet-servlet. ...
- 头条一面:Spring IOC容器中只存放单例Bean吗?
最近,很多小伙伴出去面试,感觉自己面的不是很理想,回来后,不少小伙伴把面试题做了记录发给我,让我给大家解析下,然后发出来.当我看到这些面试题时,快速在脑海中构建起了整个知识体系,从基础到框架.从分布式 ...
- Spring的工具类,方便在非spring管理环境中获取bean
场景 在SpringBoot的后台项目中,如果想要引入并且调用某个bean,可以直接通过注解的方式. 比如在单元测试中引入某业务的Controller @RunWith(SpringJUnit4Cla ...
- Bean 在 Spring 中代表什么含义,为什么这样命名?
Bean 在 Spring 中代表什么含义,为什么这样命名? Bean 是 Spring 框架中的一个很基础的概念,而单词 bean 在英语中是"豆子"的意思.从 Bean 在 ...
- Spring基础——在 Spring Config 文件中基于 XML 的 Bean 的自动装配
一.Spring IOC 容器支持自动装配 Bean,所谓自动装配是指,不需要通过 <property> 或 <constructor-arg> 为 Bean 的属性注入值的过 ...
- Spring在多线程中bean的注入问题
Spring 在多线程中,bean的注入问题 使用SSM框架,在Service层需要另开一个线程,在线程中使用@Resource或者@Autowired注入全部为NULL, @Component pu ...
最新文章
- Git简介以及与SVN的区别
- 机器“血液”登上Nature:一条假鱼靠它续航36小时,无需固态电池
- 用户请求接口信息日志记录
- Py之Kivy:Python库之Kivy的简介、安装、使用方法之详细攻略
- 1065 A+B and C (64bit) (20 分)【难度: 简单 / 思维 高精度】
- eclipse占用内存过大_MySQL 服务占用cpu 100%,如何排查问题? (MySQL面试第七弹)...
- 1070 Bash游戏 V4
- 1、Keepalived及VRRP原理介绍
- SQL Server高级查询之T-SQL编程(流程控制语句)
- 【学习】如何用jQuery获取iframe中的元素
- ES_BoolQueryBuilder
- qq一注销账号就服务器繁忙,qq熊熊怎样解除服务器繁忙的问题
- word文档目录样式如何设置
- R语言单因素分析案例
- 猴子香蕉问题——枚举
- FINAUNCE金融业增速反弹信贷投放创新高叠加股市回暖
- 计算机最最最底层的工作原理是怎么运行的
- 撤销性CP-ABE方案研究现状总结 - 2021
- 京东到家自动化测试平台的探索与实践
- Ubuntu、stm32下的C程序各变量的分配地址分析
热门文章
- iOS底层探索之KVO(四)—自定义KVO
- 【更新】Essential Studio for ASP.NET MVC更新至2018 v4(三)
- jenkins 设置 gitlab web hooks
- 图形化升级单机oracle 11.2.0.1 到 11.2.0.4
- Vue.js-----轻量高效的MVVM框架(五、计算属性)
- debian8 qemu中KVM对rbd的支持
- 总结几种简单实用的数据恢复技巧
- 「leetcode」450. 删除二叉搜索树中的节点:【递归】【迭代】详解
- hdu Train Problem I 栈的基本应用
- 苹果mac Dock窗口预览工具:DockView