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;