1.注入方式:字段(第一天所演示),构造函数,方法注入

2.构造函数注入

  1. package com.jie.ssm.service.impl;
  2. import com.jie.ssm.dao.UserDao;
  3. import com.jie.ssm.entity.User;
  4. import com.jie.ssm.service.UserService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7. import java.util.List;
  8. @Service
  9. public class UserServiceImpl implements UserService {
  10. private UserDao userDao;
  11. @Autowired
  12. public UserServiceImpl(UserDao userDao) {
  13. this.userDao = userDao;
  14. }
  15. @Override
  16. public List<User> getAll() {
  17. return userDao.selectUsers();
  18. }
  19. @Autowired
  20. public void setUserDao(UserDao userDao) {
  21. this.userDao = userDao;
  22. }
  23. }

3.方法注入

  1. package com.jie.ssm.service.impl;
  2. import com.jie.ssm.dao.UserDao;
  3. import com.jie.ssm.entity.User;
  4. import com.jie.ssm.service.UserService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7. import java.util.List;
  8. @Service
  9. public class UserServiceImpl implements UserService {
  10. private UserDao userDao;
  11. //构造函数注入
  12. /*@Autowired
  13. public UserServiceImpl(UserDao userDao) {
  14. this.userDao = userDao;
  15. }*/
  16. @Override
  17. public List<User> getAll() {
  18. return userDao.selectUsers();
  19. }
  20. @Autowired
  21. public void setUserDao(UserDao userDao) {
  22. this.userDao = userDao;
  23. }
  24. }

4.通过@Repository(“UserDao”)解决不唯一问题(不需要@Primary)

  1. package com.jie.ssm.dao.impl;
  2. import com.jie.ssm.dao.UserDao;
  3. import com.jie.ssm.entity.User;
  4. import org.springframework.context.annotation.Primary;
  5. import org.springframework.stereotype.Repository;
  6. import java.util.List;
  7. //@Primary
  8. @Repository("UserDao2")
  9. public class UserDaoImpl implements UserDao {
  10. @Override
  11. public List<User> selectUsers() {
  12. System.out.println("UserDaoImpl");
  13. return null;
  14. }
  15. @Override
  16. public User selectByUsername(String username) {
  17. return null;
  18. }
  19. @Override
  20. public int insert(User user) {
  21. return 0;
  22. }
  23. @Override
  24. public void update(User user) {
  25. }
  26. @Override
  27. public int delete(int id) {
  28. return 0;
  29. }
  30. }
  • 不声明默认是类名,命名要和service实现类中要求注入的参数名相同
    1. @Autowired
    2. private UserDao userDao2;
  • 规则:开始通过名称去在容器中找,如果名称找不到就靠类型去找。
    • @Qualifier指定名称去找,不依靠变量名称,靠@Qualifier的值去找容器中相同名称的
      1. @Autowired
      2. @Qualifier("UserDao2")
      3. private UserDao userDao;

5.java本身也提供一个注解@Resource

  1. package com.jie.ssm.service.impl;
  2. import com.jie.ssm.dao.UserDao;
  3. import com.jie.ssm.entity.User;
  4. import com.jie.ssm.service.UserService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.beans.factory.annotation.Qualifier;
  7. import org.springframework.stereotype.Service;
  8. import javax.annotation.Resource;
  9. import java.util.List;
  10. @Service
  11. public class UserServiceImpl implements UserService {
  12. // @Autowired
  13. // @Qualifier("UserDao2")
  14. @Resource(name = "UserDao2")
  15. private UserDao userDao;
  16. //构造函数注入
  17. /*@Autowired
  18. public UserServiceImpl(UserDao userDao) {
  19. this.userDao = userDao;
  20. }*/
  21. @Override
  22. public List<User> getAll() {
  23. return userDao.selectUsers();
  24. }
  25. public void setUserDao(UserDao userDao) {
  26. this.userDao = userDao;
  27. }
  28. }