Spring精华问答 | Spring Bean的自动装配是怎么回事?

戳蓝字“CSDN云计算”关注我们哦!


640?wx_fmt=png

Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。今天,就让我们来看看关于Spring更加有深度的问题吧。


640?wx_fmt=gif1

  Q:如何向Spring Bean中注入一个Java.util.Properties?


A:第一种方法是使用如下面代码所示的<props> 标签:640?wx_fmt=png也可用”util:”命名空间来从properties文件中创建出一个propertiesbean,然后利用setter方法注入bean的引用。


640?wx_fmt=gif2

Q:Spring Bean的自动装配是怎么回事?


A:在Spring框架中,在配置文件中设定bean的依赖关系是一个很好的机制,Spring容器还可以自动装配合作关系bean之间的关联关系。这意味着Spring可以通过向Bean Factory中注入的方式自动搞定bean之间的依赖关系。自动装配可以设置在每个bean上,也可以设定在特定的bean上。

下面的XML配置文件表明了如何根据名称将一个bean设置为自动装配:

1

<bean id="employeeDAO" class="com.howtodoinjava.EmployeeDAOImpl" autowire="byName" />

除了bean配置文件中提供的自动装配模式,还可以使用@Autowired注解来自动装配指定的bean。在使用@Autowired注解之前需要在按照如下的配置方式在Spring配置文件进行配置才可以使用。


1

<context:annotation-config />


也可以通过在配置文件中配置AutowiredAnnotationBeanPostProcessor 达到相同的效果。


1

<bean class ="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

配置好以后就可以使用@Autowired来标注了。


1

2

3

4

@Autowired

public EmployeeDAOImpl ( EmployeeManager manager ) {

    this.manager = manager;

}


640?wx_fmt=gif3

       Q:自动装配模式有什么区别?


       A:在Spring框架中共有5种自动装配,让我们逐一分析。


no:这是Spring框架的默认设置,在该设置下自动装配是关闭的,开发者需要自行在bean定义中用标签明确的设置依赖关系。


byName:该选项可以根据bean名称设置依赖关系。当向一个bean中自动装配一个属性时,容器将根据bean的名称自动在在配置文件中查询一个匹配的bean。如果找到的话,就装配这个属性,如果没找到的话就报错。


byType:该选项可以根据bean类型设置依赖关系。当向一个bean中自动装配一个属性时,容器将根据bean的类型自动在在配置文件中查询一个匹配的bean。如果找到的话,就装配这个属性,如果没找到的话就报错。


constructor:造器的自动装配和byType模式类似,但是仅仅适用于与有构造器相同参数的bean,如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。


autodetect:该模式自动探测使用构造器自动装配或者byType自动装配。首先,首先会尝试找合适的带参数的构造器,如果找到的话就是用构造器自动装配,如果在bean内部没有找到相应的构造器或者是无参构造器,容器就会自动选择byTpe的自动装配方式。


640?wx_fmt=gif4

Q:如何开启基于注解的自动装配?


A:要使用 @Autowired,需要注册 AutowiredAnnotationBeanPostProcessor,可以有以下两种方式来实现:

1、引入配置文件中的<bean>下引入 <context:annotation-config>

1

2

3

<beans>

    <context:annotation-config />

</beans>

2、在bean配置文件中直接引入AutowiredAnnotationBeanPostProcessor


1

2

3

<beans>

    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

</beans>


  Q:请举例解释@Autowired注解?


A:@Autowired注解对自动装配何时何处被实现提供了更多细粒度的控制。@Autowired注解可以像@Required注解、构造器一样被用于在bean的设值方法上自动装配bean的属性,一个参数或者带有任意名称或带有多个参数的方法。

比如,可以在设值方法上使用@Autowired注解来替代配置文件中的 <property>元素。当Spring容器在setter方法上找到@Autowired注解时,会尝试用byType 自动装配。

当然我们也可以在构造方法上使用@Autowired 注解。带有@Autowired 注解的构造方法意味着在创建一个bean时将会被自动装配,即便在配置文件中使用<constructor-arg> 元素。

1

2

3

4

5

6

7

8

9

10

11

12

13

public class TextEditor {

   private SpellChecker spellChecker;

 

   @Autowired

   public TextEditor(SpellChecker spellChecker){

      System.out.println("Inside TextEditor constructor." );

      this.spellChecker = spellChecker;

   }

 

   public void spellCheck(){

      spellChecker.checkSpelling();

   }

}

下面是没有构造参数的配置方式:


1

2

3

4

5

6

7

8

9

10

11

12

13

<beans>

 

   <context:annotation-config/>

 

   <!-- Definition for textEditor bean without constructor-arg  -->

   <bean id="textEditor" class="com.howtodoinjava.TextEditor">

   </bean>

 

   <!-- Definition for spellChecker bean -->

   <bean id="spellChecker" class="com.howtodoinjava.SpellChecker">

   </bean>

 

</beans>



小伙伴们冲鸭,后台留言区等着你!

关于Spring,今天你学到了什么?还有哪些不懂的?除此还对哪些话题感兴趣?快来留言区打卡啦!留言方式:打开第XX天,答:……

同时欢迎大家搜集更多问题,投稿给我们!风里雨里留言区里等你~


640?wx_fmt=png


福利

扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


640?wx_fmt=jpeg


推荐阅读:

  • 图解分布式架构的发展和演进 | 技术干货

  • Docker 系列学习文章 | 什么是容器云?

  • 任正非:华为海思芯片不是“备胎”!

  • 揭秘清华 AI 学堂班:姚期智担任首席教授,2019 年首批招收 30 人

  • Google Android 向华为“闭源”!华为手机迎来至暗时刻!

  • "两年前我对区块链的了解为零, 两年后我成了工程师" 我是如何得到第一份工作的?

  • 《使女的故事》大火,AI是背后最大推手?


640?wx_fmt=png真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++中dynamic_cast的简介

概述 这里针对于dynamic_cast简单记录下其使用用中应该改注意的事项。 详情 功能 可以用于具有继承关系的类指针或引用之间的向上转换或向下转换。同时还可以用于交叉转换。即派生类的多个基类指针或引用之间的转换。同时可以实现基类向派生类之间的转化&#xff0c;只要基…

华为正准备发布属于自己的手机操作系统;腾讯已经交出了首张产业互联网成绩单……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 第二代Google Glass 企…

qt实现QLabel上显示的文字有描边

qt实现文字描边效果图开发环境项目示例综述效果图 此程序运行的效果。 开发环境 1.关于我的开发环境&#xff0c;我目前有点迷惑&#xff0c;我的QtCreator中帮助-》关于QtCreator&#xff0c;得到如下所示&#xff1a; 但是我的安装包上却写着5.12.9 我的理解就是qt版本是…

Git Bug分支

软件开发中&#xff0c;bug就像家常便饭一样。有了bug就需要修复&#xff0c;在Git中&#xff0c;由于分支是如此的强大&#xff0c;所以&#xff0c;每个bug都可以通过一个新的临时分支来修复&#xff0c;修复后&#xff0c;合并分支&#xff0c;然后将临时分支删除。 当你接…

kappa和lambda对比 | 程序员硬核评测

戳蓝字“CSDN云计算”关注我们哦&#xff01;程序员硬核评测&#xff1a;客观、高效、不说软话。无论是技术质量、性能水平&#xff0c;还是工具筛选&#xff0c;一测便知&#xff01;作者&#xff1a;浪尖转载&#xff1a;Spark学习技巧首先我们会详细的讲解这两种架构&#x…

Feature分支

软件开发中&#xff0c;总有无穷无尽的新的功能要不断添加进来。 添加一个新功能时&#xff0c;你肯定不希望因为一些实验性质的代码&#xff0c;把主分支搞乱了&#xff0c;所以&#xff0c;每添加一个新功能&#xff0c;最好新建一个feature分支&#xff0c;在上面开发&…

git提交代码的时候出现fatal: Could not read from remote repository.

引言 当在git使用中出现这样的提示的解决方法。 解决方法 我采用重新获取ssh-key的方法&#xff0c;关于具体的操作&#xff0c;可以查看博文&#xff1a; https://www.cnblogs.com/janve/p/10946630.html。 实际上具体的步骤&#xff0c;就是下面几句&#xff1a; ssh-key…

Git多人协作

当你从远程仓库克隆时&#xff0c;实际上Git自动把本地的master分支和远程的master分支对应起来了&#xff0c;并且&#xff0c;远程仓库的默认名称是origin。 要查看远程库的信息&#xff0c;用git remote&#xff1a; $ git remote origin或者&#xff0c;用git remote -v显…

边缘计算精华问答 | 火爆的边缘计算为何兴起?

戳蓝字“CSDN云计算”关注我们哦&#xff01;随着物联网在全球各行业中越来越普遍&#xff0c;企业们发现了云计算的不足&#xff0c;它不是解决所有问题的答案。此外&#xff0c;如果只有云计算&#xff0c;物联网项目不能充分发挥其潜力&#xff0c;特别是在实时分析&#xf…

qt下QString转换为const char*字符串

概述 本文直在说明将QString类型的变量转换为const char *类型。 实现 可以采用下面的方式来实现&#xff1a; QString.toStdString().c_str(); 示例 下面是一个示例&#xff1a; const QString msg "nis你好&#xff01;"; const char * str msg.toStdStrin…

Rebase

在上一节我们看到了&#xff0c;多人在同一个分支上协作时&#xff0c;很容易出现冲突。即使没有冲突&#xff0c;后push的童鞋不得不先pull&#xff0c;在本地合并&#xff0c;然后才能push成功。 每次合并再push后&#xff0c;分支变成了这样&#xff1a; $ git log --grap…

腾讯优图贾佳亚:当AI进入产业应用时代时,计算机视觉技术更应该服务于人才对!...

戳蓝字“CSDN云计算”关注我们哦&#xff01;从移动支付的自动贩卖机到刷脸支付的智能货柜&#xff1b;从亲自到柜台验证到人脸核身远程开卡&#xff1b;从排队买票、排队进门的糟糕旅游体验到提前预约&#xff0c;刷脸入园的智慧旅游……在昆明的腾讯全球数字生态大会AI 分论坛…

gitlab常用的命令

引言 使用gitlab提交代码的时候&#xff0c;若是使用的命令行&#xff0c;则需要输入命令行指令。下面是日常遇到的常用的命令行指令。 详情 git命令行常用指令的使用&#xff1a; git status #上次提交后是否对文件再做了修改项目1git add . #添加所有的变动git checkout …

创建标签

在Git中打标签非常简单&#xff0c;首先&#xff0c;切换到需要打标签的分支上&#xff1a; $ git branch * devmaster $ git checkout master Switched to branch master然后&#xff0c;敲命令git tag 就可以打一个新标签&#xff1a; $ git tag v1.0可以用命令git tag查看…

使用AWS CloudWatch 调优Lambda函数 | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;译者&#xff1a;风车牛马整理&#xff1a;刘丹Kyle Galbraith&#xff0c;高级软件工…

记录greater和less

引言 本文针对C11中greater和less做简单的记录。本文使用visual studio 2017下控制台输出程序可以直接使用c11特性。 内部实现 查看greater和less会看到其下面的实现; template<class _Ty void>struct greater{ // functor for operator>_CXX17_DEPRECATE_ADAPTO…

操作标签

如果标签打错了&#xff0c;也可以删除&#xff1a; $ git tag -d v0.1 Deleted tag v0.1 (was f15b0dd)因为创建的标签都只存储在本地&#xff0c;不会自动推送到远程。所以&#xff0c;打错的标签可以在本地安全删除。 如果要推送某个标签到远程&#xff0c;使用命令git pu…

ARM到底是一家什么样的公司?

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;小枣君转自&#xff1a;鲜枣课堂这两天&#xff0c;一家叫做ARM的公司…

Visual Studio中输入英文会在字母之间自动增加空格

现象 不小心按了什么键之后字母之间增加了空格&#xff0c;如下面&#xff1a; ![在这里插入图片描述](https://img-blog.csdnimg.cn/b211b973b9c8470fae4402161ddb3935.png 解决办法 针对上面图片中显示的这种英文字母之间出现空格&#xff0c;是输入法出现了问题。恢复的…

Git 文件重命名

重命名 git mv oldFileName newFileName git commit -am"修改记录说明"