(1)@Autowired:根据属性类型进行自动装配
(2)@Qualifier:根据名称进行注入
(3)@Resource:可以根据类型注入,可以根据名称注入
(4)@Value:注入普通类型属性
(2)@Qualifier:根据名称进行注入
(3)@Resource:可以根据类型注入,可以根据名称注入
(4)@Value:注入普通类型属性
演示一下(1)(2) (@Resource在JDK11中已经不能再使用了)
(1):
在UserService中注入UserDao的属性
1、首先建一个dao包,创建UserDao接口
package demo02.dao;
public interface UserDao {
public void add();
}
2、再写个实现类UserDaoImpl:
package demo02.dao;
import org.springframework.stereotype.Repository;
@Repository
public class UserDaoImpl implements UserDao {
@Override
public void add() {
System.out.println("hahaha");
}
}
3、在UserService中使用@Autowired注入属性
加上@Autowired即可,不需要再写set方法或者配xml
package demo02;
import demo02.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class UserService {
//在service里面注入dao属性
@Autowired
private UserDao userDao;
public void add(){
System.out.println("hahaha");
userDao.add();
}
}
4、再写个测试类
@Test
public void testService(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");
UserService userService = context.getBean("userService", UserService.class);
System.out.println(userService);
userService.add();
}
运行结果:
(2):
@Qualifier是根据名称注入,需要和@Autowired一起使用
因为@Autowired是根据类型注入,而一个实现类中可能有多个类型,service并不知道要找哪一个,所以用@Qualifier根据名称注入来配合
只需要在@Autowired下面加上@Qualifier就行了,value对应的是一个类中@Component中的value
package demo02;
import demo02.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public class UserService {
//在service里面注入dao属性
@Autowired //根据类型注入,但一个实现类中可能有多个类型,
// service并不知道要找哪一个,因此需要配合@Qualifier根据名称查找
@Qualifier(value = "userDaoImpl")
private UserDao userDao;
public void add(){
System.out.println("hahaha");
userDao.add();
}
}
运行结果和上面一样。