1@Qualifier注解?
下面的示例将会在Customer的person属性中自动装配Person的值。
1 public class Customer 2 { 3 @Autowired 4 private Person person; 5 }
下面我们要在配置文件中来配置Person类。
1 <bean id="customer" class="com.howtodoinjava.common.Customer" /> 2 3 <bean id="personA" class="com.qinkang.common.Person" > 4 <property name="name" value="lokesh" /> 5 </bean> 6 7 <bean id="personB" class="com.qinkang.common.Person" > 8 <property name="name" value="alex" /> 9 </bean>
Spring
会知道要自动装配哪个person bean么?不会的,但是运行上面的示例时,
会抛出下面的异常:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:
No unique bean of type [com.howtodoinjava.common.Person] is defined:
expected single matching bean but found 2: [personA, personB]
要解决上面的问题,需要使用 @Quanlifier
注解来告诉Spring容器要装配哪个bean:
1 public class Customer 2 { 3 @Autowired 4 @Qualifier("personA") 5 private Person person; 6 }
2请举例解释@Required注解?
在产品级别的应用中,IoC容器可能声明了数十万了bean,bean与bean之间有着复杂的依赖关系。设值注解方法的短板之一就是验证所有的属性是否被注解是一项十分困难的操作。可以通过在<bean>中设置“dependency-check”来解决这个问题。
在应用程序的生命周期中,你可能不大愿意花时间在验证所有bean的属性是否按照上下文文件正确配置。或者你宁可验证某个bean的特定属性是否被正确的设置。即使是用“dependency-check”属性也不能很好的解决这个问题,在这种情况下,你需要使用@Required
注解。
1 public class EmployeeFactoryBean extends AbstractFactoryBean<Object> 2 { 3 private String designation; 4 5 public String getDesignation() { 6 return designation; 7 } 8 9 @Required 10 public void setDesignation(String designation) { 11 this.designation = designation; 12 } 13 14 //more code here 15 }
Spring中的后置处理用来验证被@Required
注解的bean属性是否被正确的设置了。
20、请举例解释@Autowired注解?
@Autowired注解对自动装配何时何处被实现提供了更多细粒度的控制。@Autowired
注解可以像
@Required
注解、构造器一样被用于在
bean
的设值方法上自动装配
bean
的属性,一个参数或者带有任意名称或带有多个参数的方法。
比如,可以在设值方法上使用@Autowired
注解来替代配置文件中的
<property>
元素。当
Spring
容器在
setter
方法上找到
@Autowired
注解时,会尝试用
byType 自动装配。
当然我们也可以在构造方法上使用@Autowired
注解。带有@Autowired
注解的构造方法意味着在创建一个bean时将会被自动装配,即便在配置文件中使用<constructor-arg>
元素。