spring中可以只用autowire="byName"或者"byType"来提供自动注入。但是大家有一点还需要注意,那就是它不支持基本数据类型(String,int,long等)的自动注入。例如
JAVA类:
- publicclassTestBean{
- privateStringname;
- privateLongage;
- privateStringfullName;
- privateTestBean2testBean2;
- publicvoidsetTestBean2(TestBean2testBean2){
- this.testBean2=testBean2;
- }
- publicTestBean2getTestBean2(){
- returntestBean2;
- }
- publicvoidsetFullName(StringfullName){
- this.fullName=fullName;
- }
- publicStringgetFullName(){
- returnfullName;
- }
- publicvoidsetAge(Longage){
- this.age=age;
- }
- publicLonggetAge(){
- returnage;
- }
- publicvoidsetName(Stringname){
- this.name=name;
- }
- publicStringgetName(){
- returnname;
- }
- }
- publicclassTestBean2{
- publicStringgetString(){
- return"testB";
- }
- }
- <beansdefault-autowire="byName">
- <!--login-->
- <beanid="testBean"class="TestBean">
- <propertyname="fullName">
- <value>fullName</value>
- </property>
- </bean>
- <beanid="name"class="java.lang.String">
- <constructor-arg>
- <value>hell</value>
- </constructor-arg>
- </bean>
- <beanid="age"class="java.lang.Long">
- <constructor-arg>
- <value>20</value>
- </constructor-arg>
- </bean>
- <beanid="testBean2"class="TestBean2"/>
- </beans>
- importorg.springframework.context.support.ClassPathXmlApplicationContext;
- publicclassTest{
- publicstaticvoidmain(String[]args){
- ClassPathXmlApplicationContextt=newClassPathXmlApplicationContext(
- "test.xml");
- TestBeanbean=(TestBean)t.getBean("testBean");
- System.out.println("name:"+bean.getName()+"age:"+bean.getAge()
- +"fullName:"+bean.getFullName()+"testBean2"
- +bean.getTestBean2().getString());
- }
- }
name:null age:null fullName :fullName testBean2:testB
spring源码中排除基本类型的代码(源码来自:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory类)在:
- protectedString[]unsatisfiedNonSimpleProperties(AbstractBeanDefinitionmbd,BeanWrapperbw){
- Setresult=newTreeSet();
- PropertyValuespvs=mbd.getPropertyValues();
- PropertyDescriptor[]pds=bw.getPropertyDescriptors();
- for(inti=0;i<pds.length;i++){
- if(pds[i].getWriteMethod()!=null&&!isExcludedFromDependencyCheck(pds[i])&&
- !pvs.contains(pds[i].getName())&&!BeanUtils.isSimpleProperty(pds[i].getPropertyType())){
- result.add(pds[i].getName());
- }
- }
- returnStringUtils.toStringArray(result);
- }
请注意以上紫色部分。而这个 unsatisfiedNonSimpleProperties方法都是在自动注入时调用。所以基本类型不会被注入。