spring的配置中有些配置没有id或者name属性,spring是如何注入的? 如下配置:这些配置都只有class属性,没有id属性,不是说DI都是根据id或者name来注入相应的对象的吗?而如下配置完全没有id属性,我想知道spring如何完成注入的?
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" p:order="1"> <property name="interceptors" ref="localeChangeInterceptor" /> </bean> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" p:order="2"> <property name="interceptors" ref="localeChangeInterceptor" /> </bean> <!-- - This bean resolves specific types of exceptions to corresponding logical - view names for error views. The default behaviour of DispatcherServlet - is to propagate all exceptions to the servlet container: this will happen - here with all other types of exceptions. --> <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <!--property name="defaultErrorView" value="uncaughtExceptionView"/--> <property name="exceptionMappings"> <props> <prop key="org.springframework.dao.DataAccessException">dataAccessFailureView</prop> <prop key="org.springframework.transaction.TransactionException">dataAccessFailureView</prop> </props> </property> </bean>
默认spring是通过type也就是类的全名进行注入的,只要找到类相同就可以注入,不需要按照名字,所以名字是多余的。也可以改为通过名字注入,需要在注解注入的时候引用名称属性。 在EJB3不同,EJB3默认是按照名称进行注入的@resource (name="xxxx")######上面是正解,不过我记得好像spring是默认按名称,可更改为按类注入的吧,后台用一个反射机制去查找的。######最初 Spring 的设计应该byName ,但后来 byType 方式可能更流行一些,特别seam2, CDI, Guice 出来之后。 使用 Spring Annoation的话,默认都是bytype的。。。也可以使用Qulifiliar 限定名称,这主要针对同一接口不同实现,如果只一种实现,为什么还要使用名称呢? ######
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。