ICO自动注入分两种
第一种是Resource注入
public class UserDao {
public void test(){
System.out.println("UserDao.test");
}
}
public interface UserDaoIF {
public void test();
}
public class UserDaoIFIm implements UserDaoIF{
@Override
public void test() {
System.out.println("UserDaoIFIm.test");
}
}
public class UserDaoIFIm2 implements UserDaoIF{
@Override
public void test() {
System.out.println("UserDaoIFIm2.test-----2");
}
}
/**
* 默认根据属性字段名称查找对应的bean对象 (属性字段的名称与bean标签的id属性值相等)
* 如果属性字段名称未找到,则会通过类型(Class类型)查找
* 属性可以提供set方法,也可以不提供set方法
* 注解可以声明在属性级别 或 set方法级别
* 可以设置name属性,name属性值必须与bean标签的id属性值一致;如果设置了name属性值,就只会按照name属性值查找bean对象
*当注入接口时,如果接口只有一个实现则正常实例化;如果接口存在多个实现,则需要使用name属性指定需要被实例化的bean对象
*
*/
public class UserService {
@Resource(name="userDao")
UserDao userDao;//注入bean对象
@Resource(name = "userDaoIFIm")
UserDaoIF userDaoIF;//这是注入接口,注入接口看上面的注意事项
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void test(){
System.out.println("UserService.test");
userDao.test();
userDaoIF.test();
}
}
配置文件和官网不一样,加入了spring-context。这里注意
<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
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
<bean id="userService" class="com.zks.service.UserService"></bean>
<bean id="userDao" class="com.zks.dao.UserDao"></bean>
<!--下面两个是接口的两个实现类-->
<bean id="userDaoIFIm" class="com.zks.dao.UserDaoIFIm"></bean>
<bean id="userDaoIFIm2" class="com.zks.dao.UserDaoIFIm2"></bean>
</beans>
2.Autowired实现注入
public class AccountDao {
public void test(){
System.out.println("AccountDao.test");
}
}
/**
默认通过类型(Class类型)查找bean对象 与属性字段的名称无关,如果非要用名字查询就用Qualifier注解
属性可以提供set方法,也可以不提供set方法
注解可以声明在属性级别 或 set方法级别
可以添加@Qualifier结合使用,通过value属性值查找bean对象(value属性值必须要设置,且值
要与bean标签的id属性值对应)
*/
public class AccountService {
@Autowired
@Qualifier (value = "accountDao")
AccountDao accountDao;
public void test(){
System.out.println("AccountService.test");
accountDao.test();
}
}
配置文件和上面的一样,只要把对应的bean对象实例化一下就行
<bean id="accountDao" class="com.zks.dao.AccountDao"></bean>
<bean id="accountService" class="com.zks.service.AccountService"></bean>