1、byName和setter

** xml中的 default-autowire="byName" 和 业务逻辑代码中的setter方法配合使用 **
   
    
1、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.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd"
       default-autowire="byName">
           
    <bean id="springAutowiredDao" class="com.example.spring.SpringAutowiredDaoImpl" />
    <bean id="springAutowiredDao2" class="com.example.spring.SpringAutowiredDaoImpl2" />

    <bean id="springAutowiredService" class="com.example.spring.SpringAutowiredServiceImpl" />
</beans>
        
        
    
2、业务逻辑代码:
public class SpringAutowiredServiceImpl {

    private SpringAutowiredDao springAutowiredDao; // dao接口

    // setter注入
    public void setSpringAutowiredDao2(SpringAutowiredDao springAutowiredDao) {
        this.springAutowiredDao = springAutowiredDao;
    }

    public void testService() {
        System.out.println("I'm testService.");
        springAutowiredDao.testDao();
    }
}

/*
	此时byName会根据 public void setSpringAutowiredDao2 进行查询,去掉set,
    然后首字母小写就是要找的类的名称。 与 private SpringAutowiredDao springAutowiredDao 
    中的变量名称无关。若 setSpringAutowiredDao2 去掉set后名称对不上容器中任何一个对象,则注入null。
*/


2、byName和Constructor

** xml中的 default-autowire="byName" 和 业务逻辑代码中的Constructor构造器配合使用 **
    

1、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.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd"
       default-autowire="byName">
           
    <bean id="springAutowiredDao" class="com.example.spring.SpringAutowiredDaoImpl" />
    <bean id="springAutowiredDao2" class="com.example.spring.SpringAutowiredDaoImpl2" />

    <bean id="springAutowiredService" class="com.example.spring.SpringAutowiredServiceImpl" />
</beans>
        
        
    
2、业务逻辑代码:
public class SpringAutowiredServiceImpl {

    private SpringAutowiredDao springAutowiredDao; // dao接口

    // 构造器注入
    public SpringAutowiredServiceImpl(SpringAutowiredDao springAutowiredDao2) {
        this.springAutowiredDao = springAutowiredDao2;
    }

    public void testService() {
        System.out.println("I'm testService.");
        springAutowiredDao.testDao();
    }
}


/*
	此时byName会根据构造器中的变量名称 springAutowiredDao2 寻找对象(SpringAutowiredDao springAutowiredDao2)。           
    与 private SpringAutowiredDao springAutowiredDao; 中的变量名称无关。
	若byName未找到则会根据构造器中参数类型进行查找。注意,若查找到多个相同类型的对象,则会直接报错!
*/


3、byType和setter

** xml中的 default-autowire="byType" 和 业务逻辑代码中的setter方法配合使用 **
    
    
1、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.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd"
       default-autowire="byType">
           
    <bean id="springAutowiredDao" class="com.example.spring.SpringAutowiredDaoImpl" />
    <bean id="springAutowiredDao2" class="com.example.spring.SpringAutowiredDaoImpl2" />

    <bean id="springAutowiredService" class="com.example.spring.SpringAutowiredServiceImpl" />
</beans>
        
        
    
2、业务逻辑代码:
public class SpringAutowiredServiceImpl {

    private SpringAutowiredDao springAutowiredDao; // dao接口

    // setter注入
    public void setSpringAutowiredDao2(SpringAutowiredDao springAutowiredDao) {
        this.springAutowiredDao = springAutowiredDao;
    }

    public void testService() {
        System.out.println("I'm testService.");
        springAutowiredDao.testDao();
    }
}


/*
	此时byType只允许要查找的类型的对象只有一个,否则直接抛出异常。
*/


4、byType和Constructor

** xml中的 default-autowire="byType" 和 业务逻辑代码中的setter方法配合使用 **
    
    
1、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.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd"
       default-autowire="byType">
           
    <bean id="springAutowiredDao" class="com.example.spring.SpringAutowiredDaoImpl" />
    <bean id="springAutowiredDao2" class="com.example.spring.SpringAutowiredDaoImpl2" />

    <bean id="springAutowiredService" class="com.example.spring.SpringAutowiredServiceImpl" />
</beans>
        
        
    
2、业务逻辑代码:
public class SpringAutowiredServiceImpl {

    private SpringAutowiredDao springAutowiredDao; // dao接口

    // 构造器注入
    public SpringAutowiredServiceImpl(SpringAutowiredDao springAutowiredDao2) {
        this.springAutowiredDao = springAutowiredDao2;
    }

    public void testService() {
        System.out.println("I'm testService.");
        springAutowiredDao.testDao();
    }
}


/*
	此时byType会根据构造器中参数类型 SpringAutowiredDao 来查找对象(适用于同一个类型对象只有一个)。
	当同一类型对象找到多个时,则会再根据构造器中参数变量名称 springAutowiredDao2 进一步查找:
		参数变量名称为springAutowiredDao,则查找到 SpringAutowiredDaoImpl;
		参数变量名称为springAutowiredDao2,则查找到 SpringAutowiredDaoImpl2;
		参数变量名称为springAutowiredDao3,即未找到相应的对象名称时,则抛出异常;
*/


5、Autowired

      默认根据byType进行查找,若没找到,则会再根据 被加上@Autowired注解的变量的名称 进行查找,若还未找到或找到多个,则抛出异常。

@Autowired

      private SpringAutowiredDao springAutowiredDao;


6、Resource

      默认根据byName进行查找,若没找到,则会再根据 被加上@Resource注解的变量的类型 进行查找,若还未找到或找到多个,则抛出异常。

@Resource

      private SpringAutowiredDao springAutowiredDao;


Spring的自动注入小细节_spring