spring的自动装配Bean与自动检测Bean

时间:2021-02-25 08:36:05
spring可以通过编写XML来配置Bean,也可以通过使用spring的注解来装配Bean。

1、自动装配与自动检测:

自动装配:让spring自动识别如何装配bean的依赖关系,减少对<property>元素的使用。
自动检测:让spring自动识别哪些类需要配置成spring Bean,减少对<bean>元素的使用。

2、自动装配的4种类型:

byName:把与bean名字(ID)相同的其他Bean自动装配到Bean的对应属性中。
byType:把与bean 类型相同的其他Bean自动装配到Bean的对应属性中。
constructor:把与Bean的构造器入参具有相同类型的其他Bean装配到对应属性中。
autodetect:首先尝试constructor进行自动装配,然后再尝试byType.

假设spring配有一个Bean:
<bean id="userService" class="com.test.UserServiceImpl">
</bean>
对应于类 com.test.UserService:

public class UserServiceImpl{

private UserDao userDao; //属性
...
}
若配置的为byName,则spring会将Bean的id 为userDao 的Bean自动装配到userService bean的userDao的属性中。
若配置的为byType,则spring会将Bean的class类型为UserDao的Bean自动装配到userService bean的userDao的属性中。
若配置的为constructor,则类com.test.UserService中要有构造函数,如:
public class UserServiceImpl{

private UserDao userDao; //属性
//构造函数
pulic UserServiceImpl(UserDao userDao){
    this.userDao = userDao;
}
}
那么spring会将类型为UserDao的bean装配到属性userDao中。

写个基于注解自动装配,maven工程如下:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOYAAAIfCAIAAADrCjcUAAAgAElEQVR4nO2dfXAT573v9U//z8ztTA9/3Elf0ombTJPiYIc4xOGcew6mp3dKbjs+Q2ZC4pJWN6+NoUmAYIIRGAw4jQiOcW+DY9I4MRgIJScGElIDvtjQkwRjSPG1i23ZvMjCAlm2rJVFuvePlVbPPi+7q7fd51n/PvNMRlrt8+wq/rC7kp7v/lwhABAKlwwAQgHKAoKRS2ULljfkcDQAoGJK2YLlDY+t3yvL8mPr9+p4CcoCFmBW2YLlDc/vPKI8kGX5/IE11NVyvHcAQGBW2SWv71WOtaqXPftXk6uxxxjwlrhc7vYMdrHd7cLJaBzAGZhVdu+JvxUsbzj4fy8pXo6eXPf/Dq94e0OtLMtLXt+rrsYcYsBbUlJSkpVr7e5Mug94s9sqwBsJZYeGhjo7O9PoN3Eq0RBTdZQd8JaUeAcyky4JKAvIsqLs4OBgfX39jh07WCutXLFTvvExvcly26lLyjXuu5+eZwygGCvL7W5XiXcgsbDd7SrxehNn/eRi6kJ1fcy91CWDuuaAtwS5ekCuKbRjAeLiUnxta2vTUfbp//0H+er7zGZIylTU2Xa3elU64C1JLKcuVNdHlUWHSh5KKYdUOMo6DZfiq76ysiwHzr7raykPnH1XluWKXzdV/Hq30p769e6K3+x+Snn8m90Vv95N9sU81RxQU86pypIL1a6Ie8SHsuRhHDuigrJOw9WWRF9ZX0u5fPuCr6VcluU/+75htf/1xJ+IruQnfkWhrJVlnuuVqwPlZVDWabh2JDl16hRrpcCJOqmv+rECl9RXHTjxhizLe/8W2/s3ae/fYkiT/q28ldK53e3CT+jK8+yU1Y7b7na3y7I84PW2q31diUWgrLMw9SWXr6VcVVY50DZ1hZtOh5u6wrtPh5u6wk1d4Yce20/tixubWpKlsvhHrdTg2kWJteDjl1MwVtb38ergiQqpr7p3d6nUVx3sqBj5ePVb7eNvfXLjrfYbb30y/lb7jfv//ZAF+woAsillW8q/GfQET738WIEreOrlby57fC3lBYs+RpsFOwoACsbKdtXc94/RhlCf95P6X4T6vPJIQ1fNfRbsGQBQMVb2andzV819aLva3WzBngEAFZjiDQgGKAsIBigLCAYoCwgGKAsIBigLCIadyrpLC23cOhN80mPuVgZygRXKdm4vVpssy56yOWTL8SazmQxj0kJlE6Cs5eRd2QMv3IU+HT13zFM2Z2b6U39Xfd2yRcqDnCuLTajJBxZsAqCSrbL6obHOmmLJ3yj5G0N9Xn9P7fCJ1beGujxlc/xd9b1t1e7SQuVBrpXVm0srziYAOlkpaxgaO15TKIXOoG3NkoWesjl1yxa5SwuVVrdskadsDvW6lphdqJyM292pyYSU+Bee22lPjJKY8IitTM5gTF1UsINo6ibQKxB8KM1FQ+oJbc4kYJ7MlTUTGju+vlDyH0Lb7ekh9cLAXVqod2HACHJhk2PJYx0yrxaRW5EVNV955EajaNikcGYQLbUJ/aFS/3iQKefkakA6ZKis6mtaobEDK+/XaURXoyAX9eSsWYWROtP2pB0cdaI+5JE1tUfEATQ5gsFqQBpkoizqa1qhMWm4kdr8PbU0ZRXYQS6asuw1aI8HvCUuynFQX1nNJjS9iKGSQ2g7U1YDzJOJsp2dnTsQ0gqNSX21WGP6ahzkQs+s7V7yaGaoLLIsdQMmA2XJAyaeZNPcy2nAW1LidqtHaNZqgGny+yUXGRqTeqrRpnt8JYNcxHEpdYpN2kb/lMR6nOpf4nabOspim0CvZcmh1OW0iwLtaoBZ8qgsNTQm9aSavq8ZYMOXW3Byt5x8KksLjTW570ZbTjdok7Hw/ay15FFZh4fGElctcIi1mjwqC6ExIB/A5ENAMEBZQDBAWUAwQFlAMEBZQDBAWUAwRFJ2xYLv2L0LdgA/V2jhWtkOz9yTr/1YbTvL70Sfdnjm2r2DlgDKauFa2ZOr7h3oaLp6ds/Vs3u+atveVLkUfXpy1b0W7ksGkwmyzUzCD2tUbFPWTKWxjlfuuXp2T2zis+D5Dy4d3dVUuRR92vHKPdbsqizLoCw/2KOsYWhM4bMV91w9uyd4/oPg+Q8uHWtUlFWffrZCR1kyE4ZWGdHGFvTDYVhfdubMbMkxeiYBHdCr6YvnLBjvgl4szYHYoKyZ0JjCkRcLvmrbfunorkvHGrubPWuWLESfHnmxgNGPzIRpl6SmhhuGw1TQRdmUHKNmv8gdRvpqs2jMd0EvluZArFY2s9BYU+XSNUsWKq2pcqnSdpbfSf8OgZyEyJzlaiocpu2Sg5Jj+HGWMmuSpqypd+H8+ytYqmzGoTHl89aaJQvRj18Hn/4hvacpZckCOOkom3HJMWr2K3NlDcv4OBBLlc0mNEZ+/Npb8QNGbzITRpxS0RsdGOQZSf/SLzmmjkPPfumG2HQuDCjvApS1CTI0Rn78anni+8z+WCZMlvU+uJhSVls/LN2SY7Qbb2iyX8QOa/uafxegrB1QQ2PdzZ6myqXox6/3HmcrCzgXLpWlhcaaH//ezvI7mx//ntpOb+TyXp9AnuFRWVZobJbOMQC08KgshMYAHXhUFgB0AGUBwQBlAcEAZQHBAGUBwXCmsoe3/YTa7N4vIAc4U9mPaufGZm5j7eLhZ8WwNssJhE6ff+hMZfdvKSSV7f+86msDa4kpVbn5xT7Nmx+DsroIo6zP54vFYiZXbt38QDR2W2ndvmDB8obnvceHz7zZ/3nVxcPP7K15gNEvP8oOeEtKSoxyMZCcMYswyvb29l64cCESiZhZ+f2N8yLReCQan5biqrIRKT4txSNSvGXTPEa/vCirjIHUyWGtBcqaQiRlp6amvvzyy3A4bLjyu56iyen45HQ8PJ1SdjISn4zEJ6fjzZ4iRj89ZfXnG2qr1aCVyZJD4GPnLeyFF8xBO2suGmgzIgX4ZyOSsrIsRyKR7u7u8fFx/ZXfWV8UmoyHJmdCUyllQ1Mzocn4ran4O+uLGf3YylIOgrQEWOKPT60wgs3HzVvYCy3f4MRSZIIpK8vy5ORkR0dHNBplrYmGxsbDMVXZ8YmZYDgWDM80VD3I6KpzlCWiXfQEGK42fQ55XsNeZMkczQFU+FJkgik7PT1teJRFQ2NjoZSyY6FYIBQbC8V2rn2I0ZU4ltKkScUTKZe5lDJPWvIf9tIe8fFDqvilyERSNhKJGF7LkqGx55pPK8peC8au3ZSuB6U3VrGUxb6OQs7LlGgXLQGG/c3x8yx6es512Eu9QqAZr3lfA2KXIhNJWTPfGJChMcXXKzek0RvS6Lg0eiO29dWHdUZAD4zo4YuMdtHOpsRHJ60AqSU5D3uRyrJyZriZrNU4RRhlR0ZGDL+XpYbGjvRe8QUkX0AaDki+MckXiG56eYE1+2wPIpzcs0EYZc1ADY0N+aUhf1Rpg/7ooD/qWeFkZZ3+45ezlKWGxtZWllZVlir/rXqptOql0vWVj9i9p/lhdpQic5SyEBqbDThKWWA2AMoCggHKAoIBygKCAcoCggHKAoIhkrIOvCeX3t2VATpcK+v8ul+gbPpwrazz636BsukDdb9MAsryAtT9srzuFzbvm9GftrLDJw+YBOp+WVz3C5sYjswhN6wHJkIwywKg7ldGRZS0JIM12BGVpiw2sPapUT0wp8+ENQfU/cpIWeYFqFHdL5aypuqBOb/ajBmg7pfJIko5qvul6Yt4yq4HRtvtWQ2nX3I5t+4Xcc8N7fAuPIAFH79weFQW6n4BOnCpLNT9AtjwqCzU/QJ04FFZiHABOvCoLADoAMoCguEcZScmJkZGRvoBXUZGRiYmJuz+W2WFQ5QNBoOjo6ORSCQevw1Np0UikdHR0WAwaPdfLHMcouzg5csxKRaLzcQAA2ZiUmzw8mW7/2KZ4xBl+/v74/G4FIspjVX3S11hNrd4PN7f32/3XyxzHKVsNCopTaful7qOkO1i3XzX/O0XsxoElOWC/v7+mZmZ6WhUafp1v9TViHZouWv+tovIkovb58/ffoG5vmG7uG0+Okvx6UOZD5XcH2wP028zMzOgrBXo1/3q7++PxWYikWmlGdb9UtfUtkPLXfO39SJLerfNn7+tl76ymXZh23zX8o+STz9a7nIhT21qsRgoawn6d/Hu7++PxWJTSQzrfk3RObjcVby1F1nQu7VYuyBNercWu5Yf1FtgPbFYDJS1Av26X/39/ZIUC4cnlWZY90tdU9sO/spVXHsOWXJua3Hx1nPhyXB48lxtcfL8/qv9qfUTFNeeD4cnw+HztcWuX+0/+CuXy1W89VziKboJZMm5rciI6D64iA0h+6MuxLufry1Wd2PyXG2xS9lzYiuSBMpagn7dr/7+/mg0OpHEsO7XBJ39Fa7iLeeQBee2FCsLzm0pdlXsZ66svnxuS7HLlVqT7IasWZHsvb8i2WV/hQvZg9Ryoje1e2qP9LYSjUZBWSvQr/ulKBsKhWRzdb9CdNoqXMVbvkIWfLWlOLGgrcLlcqGvKgsQird8FQp9taXYVdGG9kefakZMvJygoo2yfaK7dgHeXe2vuxooaxH6db/6+/sjkelg8KZsru5XMHiT1r6sKXI9tRdZsvcpV9HmL7QruFxFNV+QL1FHYA/4xeYil6uo5stg4vFTe+mbK6r5AumurkntHry59ylXUc2XX9QUIS/hq0Ui06CsFejX/erv75+ampJN1/0aZ/DXTUUu15OtiWetT7pcRZv+qrywqTW1ypOtiVeRVZWH6qvYyvh4461Pqg+RjaJrIOv8dVOR8gjdOKX7+PhfNxUVPflkkd5WpqamQFkrMPzGQFHWZN2vG2xan0yd64s2naUsf7I1sejspiJ82dlNRanXNWtgwyEvFT35JNIJ3T46atGms+jwrO5nFTN1tgLKWoR+3a/+/v7JyUnzdb/GBOXMxnmuZR9mN8bk5CQoaz/9/f3hcNh83S+/mJzxzHPN85zJbpBwOAzK2o+irPm6X9euXResvf+Ey+VyuZ54P+uhQFkuGBwcDIVC1NDYNQAhEAiEQqHBwUG7/2KZ4xBlg8Hg6MhIKBRi/EYAJAiFQqMjIzDFmwuCweDg5ctWhFFEZvDyZaF9lZ2kLDBLAGUBwQBlAcFwprKs7Jfd+wXkAGcqq5P9snvXbKTdjd3uE72FqDg4U1n97Be7H3HT4Wzvm43ch9blyvgGseoo2d1gFpS1Fv3sF4Zh9ovRLy/KpjRpd2esXS7u4E0oKybCKKs/kwvDMPvF6JdnZWkLTALKqoikrE72C8Mw+8Xop6es/r3m0bXc7WptJtJQrIACecVAv9M8smeGtcqQfdCMQr0wwG6Sr66vuWjQlozI7iona0RSVmZnvzAMs1+MfmxlKUdHWvWvxJ9UXVNH2fQKfWmV1a9Vpt0HzeAsZWk7066p48DeZ6sRTFmZkf3C2LXuwfHwTHBihpX9YvTTOcoSZb3o1b8wR6nKpgYxX+gLP8rqFX5i7YPuUZZyAEVrnOisZjWCKcvKfmG8tXb+2K3Y2K0YK/vF6EcYRnMoVZqOcnVppGymhb7yqyx1Z5IjpnaCsZrFiKSsTvYL4/erHrp2U+r2BZ9rPk3NfrE6IjW3ZKxeJ1HWi1b9S19Z9LSfZqGvdJXVXqNqLwzUK1PaPxW8c4nbXaK/z1YjkrLmvzGoffXh0RtSty9YuvJDavZLpy96wscKIeLnQ8o5kqIsfbh0Cn1pv5c1d5R1k7vLVpa5M5iZrNUsRRhl9bNfGDW/W+Abk3wB6UjvFWr2K6+7ajemz9li1sQVRtm02LBiwZA/OphIfVGyX3bvYF4xa6KYP345VNn1lY+sfam0Ckl9Ydkvu3cwr5hQNnH1Id4hVnaqsoCDAWUBwQBlAcEAZQHBAGUBwQBlAcFwprKQ/XIwzlQWsl80zE3x5v4HBmcqC9kvGlplWakeUDZXQPYrd0EaZRKhfRNbskMYZSH7levsl5iTYsRSFrJfqYc5yH4xlOU+ECaSsjJkv5JLc5H9MlSW00CYYMrKkP3KWZDGxFGWy0CYYMpC9ss6ZXkNhImkLGS/8IeZZb+o+yZOIEwkZSH7lZvsF/5tscvdLlIgTBhlIftlmuxOz9x/9yWMsmkB2a+MpeP+xy+HKgvZrwx/rrDoq9WscKaygIMBZQHBAGUBwQBlAcEAZQHBAGUBwQBlAcEQSdkVC75j9y7kmlzM3KbA/+8BWcC1sh2euSdf+7HadpbfiT7t8My1ewezBpRNH6uVTSvCdXLVvQMdTVfP7rl6ds9XbdubKpeiT0+uujevu6olg5+UzN2B0LFq5QurlU1rQlbHK/dcPbsnNvFZ8PwHl47uaqpcij7teOWefO8tAijLCzYoaz7C9dmKe66e3RM8/0Hw/AeXjjUqyqpPP1uhoyyZyqJmqgxzVPhoyRfI8bGpiGQX2mguPDeTyR6ScyCxNIOX+qZExQZlZdMRriMvFnzVtv3S0V2XjjV2N3vWLFmIPj3yYgGjn3aiNLlEm7XSzVGpoItoqS+DLpo9oc0hz3gPadErjbJoFydIa4+ysokI14oF39lZfmdT5VKlrVmyUGnqkp3ld9K/QyDPtsxMleF0abILK/VFhMOoymIDq0+z20NaEpbIjGWdcOcEe5Q1GeE6+PQP0c9ba5YsRJ8efPqH9G6mlCVNSUdZ5p8eCYdlq6y5PaRGr0DZHJJWhGtvxQ90Pn7trfgBox968m33Jg+BtEyVGSFI/2ipL0o4DLtlQersrsllsS4MTO4hNXoFyuaQtL4xaHni+zofv1qe+D6zZ+pMqZepSkfZ5JBIIpC5AezOFUoglfI5sMTrdWs9TX8PqdErUDaHpBXheu/x76Oft5oql6JP33ucrSzgXLj+9ev0xsLmx7+ntp3ld6JPT28stHsHARvgWlkMB84xANJHJGUBQAZlAeEAZQHBAGUBwQBlAcEAZQHBAGUBwRBJWfheNoVTZhJmANfKOj/7lTGgLJ84P/sFpI9tyg4NDXV2duqv4/zsF5A+9ig7ODhYX1+/Y8cO/dUcmf3Sn7eIzn1N1g9zu8lqW5p/Dnpv1nlXDzYoq/ja1tZmqKwDs1+UZbTREmKTGyQ3R32z5IDOwWplVV8NlXVm9otcjT4a1hedcq6dxE19s5QBnYOlyqK+mjnKOjD7Ra5GHw3v206ptsVW1mGSarFU2c7Ozh0Ip06d0l/fgdmvDOuHEdW2tBcG5JslBnQOXH/J5cjsF7maifphyZU0XbDNkBvWbMQxcK0sZL8AEq6VhewXQMK1shgwxwCQxVIWAGRQFhAOUBYQDFAWEAxQFhAMUBYQDGcqe3jbT6jN7v0CcoAzlf2odm5s5jbWLh5+VmBrM07OOC5y40xl928pJJXt/7zqawNriUlQObglK2VOQSaAskmEUTatgmGtmx+Ixm4rrdsXLFje8Lz3+PCZN/s/r7p4+Jm9NQ8w+uVcWeye3c6bo2IDwiib1u2/3984LxKNR6LxaSmuKhuR4tNSPCLFWzbNY/TLtbIOuW82X4ikrPmCYe96iian45PT8fB0StnJSHwyEp+cjjd7ihj99JRNP7PlHdBOXdVuSKdjTsNe9GmKqRm9+IYYb5UfRFJWNl0w7J31RaHJeGhyJjSVUjY0NROajN+air+zvpjRj61sZpktWXWJTBjodsxh2Eu/Qhi5IepqPCGYsrKJgmGyLO9a9+B4eCY4MTMejqnKjk/MBMOxYHimoepBRj+do2xmma3UMClvLQ57aQcmDqDEhuircYRgyposGPbW2vljt2Jjt2JjoZSyY6FYIBQbC8V2rn2I0Y8QjpZzTCuzpR0rmTu3MuylPY7jo9E3RFmNH0RS1nzBsN+veujaTanbF3yu+fRzzacVZa8FY9duSteD0hurWMpiaRXkFJxZZkvzJYFqliVhLyRtRrqueZvYhlircYNIypr/xqD21YdHb0jdvmDpyg8VX6/ckEZvSKPj0uiN2NZXH9bpi55m0YNXZpktZBX9826uw16ksshKqQph5IaYq/GCMMqmVTCs5ncLfGOSLyAd6b1ypPeKLyD5AtJwQPKNSb5AdNPLC/K6q3zB5ck9G4RRNi02rFgw5I8O+qUhf3Qo8d/okD866I8O+qOeFbNIWcf9+OVQZddXPrL2pdKqytKqytK1yH+rXiqteql0feUjdu+gJVC+X3MCzlQWcDCgLCAYoCwgGKAsIBigLCAYoCwgGM5UFrJfDsaZykL2K0e0uym/Itv8y4QzlYXslzpRILsfEkDZLIDsVwbbzlouQlkOEEZZyH6lCyhrM5D9Sjf7hbwZw/JmyNY175B6YWBzkkwkZWXIfiVHNJP90iqrX96M2HpqDJaytiXJBFNWhuyX6ewXfpTVqWKCbx3dGPsoa1OSTDBlIftlPvuVX2XtS5KJpCxkv9LIfqWvrPYaVXthwFOSTCRlIftlPvul/V7W3FHWTb5DtrL2JcmEURayX/nE9DmbgySZMMqmBWS/0sSsiRz8+OVQZSH7lSYmlOUmSeZMZQEHA8oCggHKAoIBygKCAcoCggHKAoIBygKCYaey7tJCG7fOhIevywE2Vijbub1YbbIse8rmkC3Hm8zmd0WTynLw0+XsJO/KHnjhLvTp6LljnrI5M9Of+rvq65YtUh7kXFkLAiy2ZmRmNdkqOzQ01NnZyXq1s6ZY8jdK/sZQn9ffUzt8YvWtoS5P2Rx/V31vW7W7tFB5kGtlc5F6sn8TAJ2slB0cHKyvr9+xYwdrheM1hVLoDNrWLFnoKZtTt2yRu7RQaXXLFnnK5lCva6lT6pBklUzNPCE6GWaeWLdsR+bYe4kumk2Y2iX93Bh9BqJ2mp/RJkxu1Alkrqzia1tbm56y6wsl/yG03Z4eUi8M3KWFehcGlItFLFlFpqASS9EQk0HmiUwmaSdTI100/yi0M1XRXSJiWPTcmHY4fNPsYJbJ7JdzL7UzVFb1VV9ZWZYDZ9/1tZQHzr4ry/KBlffrNKIrEbfC/g7UkzOeRNWf2pzsgR6NqIE/PGtLnXrNimHRcmNEPgf3DD/Kst+1yY06hUyURX01VNbXUi7fvuBrKZdlWRpupDZ/Ty1NWQUkbmVCWfYatMfUZJKRsmQUz+BfEflGKMoSKb+0lDWzUaeQibKdnZ07EE6dOsVaM3CiTuqrfqzAJfVVB068Icuy1FeLNaavlLgVGUPFUlCMnCrrMTWZZKAsK9lH7pKsluCi5sYoF9/I5QeSRzF81yY36hDy+yWXr6VcVTZxoO2pRpvu8ZWMW9Eyfdg5nfEpSS+mp5xM1WSSvrL4JnR2ifZRi34NQYlKIUkpo3edxkadQB6V9X28OniiQuqr7t1dKvVVBzsqRj5eLfWkmr6vGQBfbs0G8qlsS/k3g57gqZcfK3AFT738zWWPr6W8yX032nK6QTB2VpBHZbtq7vvHaEOoz/tJ/S9CfV55pKGr5r78bQ6YJeRR2avdzV0196Htandz/jYHzBJg8iEgGKAsIBigLCAYoCwgGKAsIBhcK/uf3keoze79AuyEd2Wp5buMrBXiV3XibsOAObhW9s+/L2WV7/rz70vZ/UBZJ8O1sgfeeFSK3VZaNBaXYrejsdtq+a4DdY8y+oGyToZrZVu3/XNEikek+I8WP//8hj9Eoref3/CHHy1+PiLdnpZut27/Z0Y/UNbJcK3sn2r/ZXI6Pjk9s7mx7UeLnw9Px3+0+PnNjW1KTa8/1f4Lox8SlsIn39GyYpSZe/TUFytNhd5rXVPEQy92BspmCNfK7q7519BUPDQVD03NKLL+aPHzoakZZUlTzb8y+mnDUqkJ0LSMFDX+RU196R67E0NrkpL6sTNQNkO4VnaXZ1EwPKM0xdfNjW1K7a5geGaXZxGjHyM4QM9IJdfQHD6peQT9NBX2quHsclA2Q7hWdkf14kAopjT1KBsIzShL3lq/mNGPrSw93kgWpmIEFdUO9GAvKGsF/CrbuuHxmorCfXW/vH4zpsh6/aakiHv9Zuz6zVjdun9ndMULUaGnezwjRS9MRY/Q4GkqJKrVnizRpl2Q3BQomzs4VXZf3S83LJs7/PHvBt57btvSB5RvDK6Mx5RvDK4EpSvj0pbXfsbozapiRf0ARS1MRT/K4h/okoYi4UNVe1A2X3CqbE1F4ZWPXtywbO7n257+y+qlu19+fOSGNBKIjtyI+gKS70bUF5A8q/+n3bsJ2ACnyu6r++XHv/qZ/9iSZxbc/e7Tv3jlsQeHx6LDY9GhMWloLDo0Fh0ei77+6s/t3k3ABjhVVpblZxbc3fAf/3Zmw6PPLLi79j8eWvvyErLZvY+ADfCrrCzL++p+WVNRuPp//De7dwTgCK6VBQASUBYQDFAWEAxQFhAMUBYQDK6V7WivpTa79wuwE66VPf7JNmr2y8Da1C/9mc71zlfpL/iRNgdwreyxw3Ws7JeetaCso+Fa2U8OvamT/Wo/9HujAdJS1oL4DSibA7hW9tCBt3SyX4cPvmU0ACjrQLhWtm1vg07260Db2/Ru1IpZrBu8u1LFC1JZBcReyHvxBtfKtnz4B53sV2trI70bq2JWaoY3Ne+FeUqrJ6IF8l62wK+yaMEwavbrvff/SO/JKj9EFuwiJmwTZUQg78Ud/CqLFgyjZr+a3nuX3tNQWXrei6psqiPkvTiBU2XJgmFk9qux6T16Z+zCgAyB0fNe9AsDyHvxBqfKkgXDyOxX/Tst9M7YgZMSAqPmvZJLtR+/IO/FGzwqSy0YRma/3vxDq917CtgAl8rSCoaR2a+6hn127ylgAzwqSy0YVlN/cHP9wZr6jzbXH9y88+DmnQe31u+3e08BG+BRWSgYBujAo7IAoAMoCwgGKAsIBigLCAYoCwgG18oe3vYTarN7vwA74V1ZavbLyNqc/i6ar1BN1nC7Y3mGa2UP1s5V8jNSLJ58kMh+6VqbtbL4VC8uzeB2x/IM18ru2/xARIrvaOnesOv4i5sOPPnqn6aluJr92puJ0R4AABfTSURBVLf5AUa/LJUd8JaUlHCqgxD1ofIL18q2bJoXjsQnp+Ph6fjkdHwyElciNEprqZnH6JeVsspNu6l1FTgAlOVb2WZPUSgS39HSXdfcuen/dFS9dfR3Ww8/59n/9GsfhqbizZ4iRj9UWbQMDfq3VpeXeL2Uu8ynlKVIwoqUIcuJW9VjUx9NlyVDxyxRcxTYDElqPTNWak10uFb2j+uLlczMzWQpJbT9cf2DjH6qssikVhkv66WZ+a1TkoahLD1Shi5nbj3NsmSaMVlpH6Kjcw/HXCvbUDU/EIpRj7KBUKyhaj6jX1JZ/OzOqKaUfIr+lU0cZcmn2uWsradXlowdX1Mf0jvqp9YEhmtlva89dO1m7DrRlIXe1x5i9NNRFjvrJ1cv8Q6gJ1L0ZJ5LZan3sNEtS2ZSWaaZrNSawHCt7LZVD18Zpx9lr4zHtq96mNGPfWGAXGLSLgw0Q+BHWe19kyiRMlwv1tbTKUtmRllqRzK15hS4VrbmlQW+gMRqNa8sYPQz8fELSX9pPn4hQ+gry4qUaeVgf/xKpywZGfbFP37RPmpRP985AK6V3bDikaExaUdL99amk6/v/HRF7Z/dr7cO+aOD/uigX9qw4pHcbEb/Cy3jC4N0cdphz2K4VraqsvTv16N/vx69rP2v8mDdS6WZDjzgLWF8rqetSrwMytoJ18q+9ttHX3vp0ddeKl3z21LlQfJx6Wu/ffS132asrOZMyvQ1cWYl7QJl7YRrZQGABJQFBAOUBQQDlAUEA5QFBAOUBQSDa2Wh7hdAwrWyGdb94gu4QWeO4VrZDOt+kb/AqpOobACUzTFcK5tp3S9Q1slwrWymdb9AWSfDtbIZ1v3SVVZ/mh4tcZUaCZ3oCrW+7IJrZTOs+6WjLGVGipnEFbE21PqyD36Vzbzul95RlkhEmUpcYYO7oHCSjfCrbOZ1v0jhaMnBVKrPOHGFAsraDKfKZlX3C0tXaesdEYkoE4krqPXFE5wqm1XdL1mWtSd8LE5Ly2LpJq6g1hdP8Kgs1P0CdOBSWaj7BbDhUVmo+wXowKOyUPcL0IFHZQFAB1AWEAxQFhAMUBYQDFAWEAxQFhAMO5V1lxbauPW0ma1Fi3jDCmU7txerTZZlT9kcsuV4k7m9U5syGijLB3lX9sALd6FPR88d85TNmZn+1N9VX7dskfIg58om58dmYC79drKgKj9kq+zQ0FBnZyfr1c6aYsnfKPkbQ31ef0/t8InVt4a6PGVz/F31vW3V7tJC5UGulVVnUeVEWV5LgM1WslJ2cHCwvr5+x44drBWO1xRKoTNoW7NkoadsTt2yRe7SQqXVLVvkKZtDva4lZgXqFdYiqhIg0w/ZK2s3QXZh+I/vmeaiASuq4MSbv9tJ5soqvra1tekpu75Q8h9C2+3pIfXCwF1aqHdhYFhwi3EDbmSCKr0skm5xLHxRarTUKwNeNyI0XhYGCZCRqwFZk6Gyqq/6ysraCNeBlffrNKIrWblKv0oRuQryxGxxLHJyN3vat+YASqseBsfZPJCJsqivhsqiES5puJHa/D21NGUV0MpVxsoyjTNbHIulPB6/JQvZqRkbNLjArncHZEgmynZ2du5AOHXqFGtNMsIl9dVijekrJadFKaylnve9+rUIzRbH0j+u4qXh8BJeJW63+u0CazUgO/L7JRcZ4ZJ6qtGme3wlc1rEwSp13k36RqTBXZoDKH6SJqNgmsJa9EsGpGiY240dh6kXBdrVgKzIo7LUCJfUk2r6vmZAbr+OYtagBWwln8rSIlxN7rvRltMN5t9Y+H6WA/KoLDXClb/N5RFmATDABvKoLES4gHwAkw8BwQBlAcEAZQHBAGUBwQBlAcEAZQHBEEnZFQu+Y/cucMMs/mGDa2U7PHNPvvZjte0svxN92uGZa/cO2gcoyycnV9070NF09eyeq2f3fNW2valyKfr05Kp7LdyX3MTIgOyxTVn90JhCxyv3XD27JzbxWfD8B5eO7mqqXIo+7XjlHmt2VZZlUJYf7FHWMDSm8NmKe66e3RM8/0Hw/AeXjjUqyqpPP1uhoywZ80JjCejcQ/2qXfhoWcXIKKux9hZNubndZLBM889B78067+rBBmXNhMYUjrxY8FXb9ktHd1061tjd7FmzZCH69MiLBYx+ZCZMuyQ129uwapdKDmJkjGUmCo+RwTJNXTHyzZIDOgerlc0sNNZUuXTNkoVKa6pcqrSd5XfSv0MgJyEyp74aFucgu2QaI0vtinY1U4XHiGAZ9R3oDegcLFU249CY8nlrzZKF6Mevg0//kN7TlLLqoTUjZdOPkTFXM1d4jBYsYyvrMEm1WKpsNqEx8uPX3oofMHqTmTDiwsBk1S7tLQkyj5Gp42RWeEwmgmXaCwPyzRIDOgdOv+QiQ2Pkx6+WJ77P7I9lwmRZ7+OXKWWzjpGRH9zMFx5TV6Jmf8k36+goOo/KUkNj3c2epsql6Mev9x5nKws4Fy6VpYXGmh//3s7yO5sf/57aTm8U6l6fQI7gUVlWaAzmGAAyn8pCaAzQgUdlAUAHUBYQDFAWEAxQFhAMUBYQDGcqe3jbT6jN7v0CcoAzlf2odm5s5jbWLh5+1sBa+oyCdLA932L7DuQfZyq7f0shqWz/51Vf61ubT2WJKYHZ/fzf7qYPAMryg8/ni8ViJldu3fxANHZbad2+YMHyhue9x4fPvNn/edXFw8/srXnAaIC0lE1rZaT4SBoQs2Bm8U2WhVG2t7f3woULkUjEzMrvb5wXicYj0fi0FFeVjUjxaSkekeItm+YZDcCzshls1FGIpOzU1NSXX34ZDocNV37XUzQ5HZ+cjoenU8pORuKTkfjkdLzZU0Tvpr21fCJ6hZ3D8Xl92owXNkWWcgVAKptZjIyhLH1SYmr+rgOKk4mkrCzLkUiku7t7fHxcf+V31heFJuOhyZnQVErZ0NRMaDJ+ayr+zvpieje8GgI5pZtaygvzlFaIJAWmbMYxMkNlHVucTDBlZVmenJzs6OiIRqOsNdHQ2Hg4pio7PjETDMeC4ZmGqgfpPfGjLOUFmXJUoilLiYIpaJXNPEZm4ihL2VUnFCcTTNnp6WnDoywaGhsLpZQdC8UCodhYKLZz7UP0nobKKp988FJeVGVTHbXyEcpmGCMzUpa+q04oTiaSspFIxPBalgyNPdd8WlH2WjB27aZ0PSi9scqUstprQjwbiKxBvzAgMl4K5IVBmjEyYl+Tz7SHT+cWJxNJWTPfGJChMcXXKzek0RvS6Lg0eiO29dWH6Z2xA6dbL6WFfsukzXgR0XGNBsTHr3RjZGgHdRVSWcauEmayVuMXYZQdGRkx/F6WGho70nvFF5B8AWk4IPnGJF8guunlBdbssw0IcnLPBmGUNQM1NDbkl4b8UaUN+qOD/qhnhWOVnQU/fjlLWWpobG1laVVlqfLfqpdKq14qXV/5iN17mgdmTXEyRykLobHZgKOUBWYDoCwgGKAsIBigLCAYoCwgGM5UFrJfDsaZymaY/eIZ238ksH0HkjhT2QyzX+TEqtSUp4xhzDVIlzSNyXHULP0dyB/CKGtJ9ivnyqITtQa8Jdb/NJWr3A5HCKOsJdmvXCubg4N0loCy9mFF9ktXWf1JgrR6Xd4BZjbFskJfuYqacZQqE0lZOd/ZLx1lKccdE/W6ZOpsFSsLfeUqasZRqkwwZWUT2S9Zlnete3A8PBOcmEkv+6V3lM2sXldqmJS3lhb6ylXUjKNUmWDKmsl+ybL81tr5Y7diY7di6WW/yD8VrcZdWvW6tGO53O0WF/rKVdSMo1SZSMqayX4p/H7VQ9duSt2+4HPNp9PIfuEpE+QUnFm9Ls2XBKovVhb6yjpqxl+qTCRlzX9jUPvqw6M3pG5fsHTlh2lkv2RZ1p48sWgsfoqjnPboEVv81GiiI/6Hpn/6YX0eQvc6u6gZf6kyYZQ1k/1SqfndAt+Y5AtIR3qvzK7sV/7g5osvYZRNiw0rFgz5o4OJ1Ncsyn7lD25+/HKosusrH1n7UmkVkvpyfvYrf3CWKnOmsoCDAWUBwQBlAcEAZQHBAGUBwQBlAcEAZQHBsFNZd2mhjVsHBMUKZTu3F6tNlmVP2Ryy5XiTuf11kZvfKgHZAmUPvHAX+nT03DFP2ZyZ6U/9XfV1yxYpD3KubHIKXAau0Sc88/FTJSDL+Va2s6ZY8jdK/sZQn9ffUzt8YvWtoS5P2Rx/V31vW7W7tFB5kGtl1XlvOVFWb5IpYD35VfZ4TaEUOoO2NUsWesrm1C1b5C4tVFrdskWesjnU61piohyWrJLpmaeEY2SGKaPYEx4RMdi6/uQ++mRD7Ib3BpswuVHHkmdl1xdK/kNouz09pF4YuEsL9S4MGJkk+hRsBGSKKDpEhrEnbDTt1s0MqN1JdY41W1ndN2hyo04mv8r+5/pCabhZbQdW3q/TiN5GmSTqGVuzijbnocVU7Ik1mvkBaVEc3DP8KMt+g2bfhZPJr7IHVt4r9XmVdmDl/dJwI7X5e2ppyiqwM0k0ZZnGZRR70vHX7IAUZYlPhmkpa+pdOJn8Ktvywl1SX63UV3tg5f3KA7IxfTUuf0WmoLAVsAuDNGNPeqOZH5C4MEj900CDfdQEmLmYF7PGmDPJr7JNT/13qWf1gZX3Sz3V1KZ7fCUzSbRMH7oG8XVUKsOkWdl07Il6TqdsXW9A+scvpDcSjTJ6g2ls1LHkV9k3fzHnwMr7pZ7V1Kbvawbk9uso+HKLT/L+U0KT+26dltNNgbGzApgWAwgGKAsIBigLCAYoCwgGKAsIBigLCAYoCwgGKAsIhm3KhvqODjffEeo7atcO2E9qmsGsmBuQK2xTdrj5jtCZguHmOwzW086wxmbdyeRy+p+ehx/hqfMHrFb28r6yt9eVvb2vK/H8621v17feVB4HWlvXlb29ruztdWXHvlZ7dB3DF45+UZ9Y8va6srfXbbvM2tjX27RDEbuhtPrWm+oSdWfYZKhsWlW4qPRU3zHcfIfxgZZSNyKxmDlXhjIEOqnEvBuWhR4tVVbjUErZrmMadxURu45pTFUWjn5RTxcRYfSL+rK367cdY6x5eV9Z68lRfCn674dNhsqavKe26zdHi6sO3l/9ccHGY/+0/fQdb/71W29fcP3mqKxeGJwoGG7UPdAylEXSAkZ/78zThrNKWZTRL+qf/SIgy4HWVvqrhsoarGmPsmaqcH2nrIralFd7qu8InfhunzcDZdEb9KZ1lCW7a4uppC4fzETH2t2uEm97opu7PbUK7d8I9cKAiHwREw01UTDmHespBcOoE3vMKdt1jHKUVcmNspTrinwrK5urwnXf2xWsplwb9Hl1rw3o17J49MXcpax28jTinYkcGLW2FiKTsgnGrFdiNGyBNvKV+ieGRcGolbSIvtj70mJGWc0h8OttxAWr9lpWvSymYCz3zZPPpnbAAmVlE1W4vlW9ePXRKrJ9q3pxqO9oT+0d/qPf7atlH2hpR1ntYdPsWTWhNh6sUf+yujkwZuiKksQ1k0rTLmDFH5iJTRfz3wf5vjQYKnt5H8XCmyefReykiqh+Snv2i4C60MzxuOuY2sUCZc1U4fpW9WJWk2W5p/oO/9Hv9lQzlUX+IKxUTFoXgpqjUwlWZzM5GiUHRp89a62yA15aJS18WMb7SoApe/Pks6igVF+TqBcJObgw0A5rlbJmqnCdXPmoflOuDXpWs64NmNesWHTK4OMXNQE4gBfW0s2BUWtr5VJZbVLGIL3IjosR70uLVtnRL+rVawD0cZJAa2vKYNWtTJUNtLYmRug6lhz28r4y6y4MzHxj8Pkz8/r3rGC1z5+ZF+o7emb1Hf5D/3RmNX6gJa4/KYci9SKU+oWtdlXKtS52mwC9HJh2FNoFrillNbuJHSnd9MJi+FtWeuvExVj3d5BlGVGW8gXtOvTb1sSRL3FJoPe9LHoloIKtU3bsa1RZZHOoo3lV1mQVrvald13c9jOlXdA+uLDtZ+1L75JlmaWsBTg1K6PzvvBrWa7Iq7ImOfTTbyvtzz/99qHFyfbTbx9anFgiy/KZ1XcoLa97QsGpv5Lqvi/84MoNef/1S3TQr6SchFPfF8osVRYQF1AWEAxQFhAMUBYQDFAWEAxQFhAMUBYQDMh+cUxOfp3Tzg12ADxnv1i3pUarX+QVM6myfALK0uA5+zXgLXGVlOBTkjRTVfILMZHKYm2dOgciO3jOfg14S1xuL206qNeav6XOdEFLAGVp8Jz9Sgii+cMpT/BUC3rm1pwIkSeM5JY3nbQWMYNW25cV4Upr69r8g7b8UrojlHgHyGAytj7tRvZcw3P2K/k/W5tzSixR53eTcShK9oad3EoNbGJStsGArAiX+a1jE8nRpGQaIzAqPNAGEXA6G8/ZL40KJd4BTa4J+bMQxwk0Mpv64xIHL+xPaFJZpNIWPiAjD2N+69iVAPp+MxtBNvM/wWXNJ4NcwXP2C49epa5gNaWIKIEa5fWUhsbJLXPKMv7NMNYnzwlGW9dRNrMRZMaJgbbnoojLc/aLvHAkAiz0OBSZfzJMbplQVnPKpQ7IinCZ3zoew0QvxNMfod2ruZalDSJgzTB+s1+UfCJ6lYccWhOnuVQcSsbs0a5ITW4xlaV9EmINyIpwpbN19AOSV7uKyRFSaxKZS9pHLeqnRZ6Z1dmvXCPMgUpoZnH2K/eAslYA02JyCChrBaAsIBigLCAYoCwgGKAsIBigLCAYoCwgGKAsIBigLCAYVijbub1YbRZsDnA2ec9+HXjhLp2nAJAu+Z3J1VlTLPkbJX9jqM/r76kdPrG671BlZ00x2jLbAWDWkt/s1/GaQil0RqcdrynU6U7MlUPCVcxEF+Bw8pv9Or6+UPIf0mlNT32XuQ3KJBNtuEqvJgDgWPKe/QqcfdfXUh44+64sywdW3q/TiK66hbhkyEzPUvKe/fK1lMu3L/haymVZloYbqc3fU0tTVgGNJYGyQJ6zX4ETdVJf9WMFLqmvOnDiDVmWpb5arDF9NSjEJVNyTsAsIL/fGPhaylVlEwfanmq06R5fyVgS9fYtQgWXgKzJY/bL9/Hq4IkKqa+6d3ep1Fcd7KgY+Xi11JNq+r4CAJU8/vrlayn/ZtATPPXyYwWu4KmXv7ns8bWUN7nvRlv+tg44lTwq21Vz3z9GG0J93k/qfxHq88ojDV019+Vvc8AsIY/KXu1u7qq5D21Xu5vztzlglgAzuQDBAGUBwQBlAcEAZQHBAGUBwQBlAcEAZQHBgOwXIBg8Z7/yeiNBuEuhqPCc/QJlAQrcZr+Q+ilIJQ/Kjd7pUTCsnB0WESMGB8SB4+wXdpd/sr4XLQrGqI1Br9EFR1kR4Tn7hVvFCNwmX06vaBYoKyo8Z78Qq+j1vUwra1yjCxAGjrNfZO05dSlV2fSKZoGyosJ19gupY0+t76UTBTMsmoUODoiEc7NfEBl3KE7Kfg14S+BGMs7HWdkv5AIAfHUqkP0CBANmcgGCAcoCggHKAoIBygKCAcoCgmGFsoe3/YTaLNg04DysUPaj2rmxmdtYu3j4WaGsbXfDlAQ+sELZfZsfIJX9+0mPUNaCsrxgkbLR2G2s/f2kR7F23+YHLNiHrAFlecEKZd/bWBSJxiPR+LSUatHY7WkpHonG39tYZME+ZA0oywsWKTsRiX9+bvjzc8OXRm5OROKXRm4qTyciOsoi0S783vJo0gCdClPibU9MM3C3p9bC5hsgM27VubSGfUFZXrBC2V3rHpyIxAuWNxQsb1j1zl8mIvFV7/xFeToRie9a9yCjnzbalZqorZ2lpV2uCc+wJ3MnZiamJiga9gVlecEiZcfDMwXLG4pe2F30wu7x8IzyoGB5w3h4Rl9ZRJPkU3wirLoa+gLrsQpWVMywLyjLCxYpe/2mpBxiC5Y3vHngv9THY6FYLpQlQ16grGOxQtntq0oUZd888F8/f31fwfKGn7++TxH3+k1p+6oSRj/0mhN9QlwYUMLftMcD3hLtqsQCdl9QlhssUnYkkFBWMVV9MBIwUNbtpn360vn4ZUJZRHn1HwIoKwxWKLtx5YKRgHTo9OCZvhtf+yYOnR782jdxpu/GodODIwFp48oFjH4QggUoWKTskD865JeQ/6YaKAukhRXKVlWW6jdGP1AWoACTDwHBAGUBwQBlAcEAZQHBAGUBwfj/sMmsCoXK8jcAAAAASUVORK5CYII=" alt="" />

UserServiceImpl类:

import org.springframework.beans.factory.annotation.Autowired;

import com.test.dao.UserDao;

import com.test.domain.User;

public class UserServiceImpl implements UserService {

    @Autowired  //自动装配Bean,使用注解

    private UserDao userDao;

    

    public void save(User user) {

        userDao.Save(user);

        System.out.println("saved!");

    }

    public void setUserDao(UserDao userDao) {

        this.userDao = userDao;

    }

}

自动装配Bean是通过设置自动装配的类型来为Bean的属性装配依赖。所以在beans.xml中只指定Bean而不需要显式指定属性<property>.

beans.xml中:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns:context = "http://www.springframework.org/schema/context"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

        http://www.springframework.org/schema/context

        http://www.springframework.org/schema/context/spring-context-3.0.xsd"

        default-autowire="byName">

    

    <context:annotation-config />  <!--由于使用了注解,因此需要配置 -->

    <bean id="userDao" class="com.test.dao.UserDaoImpl"></bean>

    <bean id="userService" class="com.test.service.UserServiceImpl"></bean>

<!--     <context:component-scan base-package="com.test"></context:component-scan> -->

</beans>

3、自动检测Bean

首先修改beans.xml,使用<context:component-scan>替代<bean>

<context:annotation-config />

<!--     <bean id="userDao" class="com.test.dao.UserDaoImpl"></bean> -->

<!--     <bean id="userService" class="com.test.service.UserServiceImpl"></bean> -->

    <context:component-scan base-package="com.test"></context:component-scan>

修改UserDaoImpl,同样修改UserServiceImpl.

@Component   //spring会自动检测

//@Qualifier("userDao")

public class UserDaoImpl implements UserDao {

    public void Save(User user) {

        System.out.println("userName:"+user.getUserName());

        System.out.println("password:"+user.getPassword());

    }

}

4、限定依赖

当有足够多的Bean满足装配条件,@Autowired注解没办法选择哪一个Bean才是它真正需要的,因此可以配合使用@Qualifier注解

如,除了UserDaoImpl实现接口UserDao,现在还有UserDaoImpl2实现,为UserDaoImpl2使用@Qualifier注解限定。

import com.test.domain.User;

@Qualifier("userDaoOther") //限定

public class UserDaoImpl1 implements UserDao{

    public void Save(User user) {

        System.out.println("userName1:"+user.getUserName());

        System.out.println("password1"+user.getPassword());

    }

}

在UserServiceImpl中,若需要装配UserDaoImpl2,除了使用@Autowired自动装配,还需要使用@Qualifier("userDaoOther")限定依赖

@Component("userService")

public class UserServiceImpl implements UserService {

    @Autowired

    @Qualifier("userDaoOther")  //限定依赖,最后依赖的Bean为UserDaoImpl2.

    private UserDao userDao;

    

    public void save(User user) {

        userDao.Save(user);

        System.out.println("saved!");

    }

    public void setUserDao(UserDao userDao) {

        this.userDao = userDao;

    }

}