Spring @Autowired注解用在集合上面,可以保持接口的所有实现类

Posted junge8619

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring @Autowired注解用在集合上面,可以保持接口的所有实现类相关的知识,希望对你有一定的参考价值。

CourseService课程接口有2个子类,HistroyCourseServiceImpl和MathsCourseServiceImpl
public interface CourseService {

    String getCourseName();

    void attendCourse();
}

package com.junge.spring.demo.service.course.impl;

import com.junge.spring.demo.service.course.CourseService;
import org.springframework.stereotype.Service;

import java.util.logging.Logger;

/**
* 历史课
*
* @author liuxj
* @create 2018-01-06 12:46
*/
@Service
public class HistroyCourseServiceImpl implements CourseService {

private static final Logger logger = Logger.getLogger(HistroyCourseServiceImpl.class.getName());

@Override
public String getCourseName() {
return "历史";
}

@Override
public void attendCourse() {
System.out.println("上历史课");
logger.info("上历史课");
}
}

package com.junge.spring.demo.service.course.impl;

import com.junge.spring.demo.service.course.CourseService;
import org.springframework.stereotype.Service;

import java.util.logging.Logger;

/**
* 数学课
*
* @author liuxj
* @create 2018-01-06 12:49
*/
@Service
public class MathsCourseServiceImpl implements CourseService {
private static final Logger logger = Logger.getLogger(MathsCourseServiceImpl.class.getName());

@Override
public String getCourseName() {
return "数学课";
}

@Override
public void attendCourse() {
System.out.println("上数学课");
logger.info("上数学课");
}
}
 

学生类有接口attendAllCourse,参加所有课程

public interface StudentService {

    void addStudent();

    Student getStudent(int id);

    void updateStudent(Student student);

    void attendAllCourse(Student student);
}

package com.junge.spring.demo.service.impl;

import com.junge.spring.demo.model.Student;
import com.junge.spring.demo.service.StudentService;
import com.junge.spring.demo.service.course.CourseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.Set;
import java.util.logging.Logger;

/**
 * 业务实现类
 *
 * @author liuxj
 * @create 2018-01-06 11:24
 */
@Service
public class StudentServiceImpl implements StudentService {

    private static final Logger logger = Logger.getLogger(StudentServiceImpl.class.getName());

    /**
     * @Autowired注解用在集合上面,可以保持接口的所有实现类
     */
    @Autowired
    private Set<CourseService> courseSet;

    @Override
    public void addStudent() {
        System.out.println("addStudent");
        logger.info("addStudent");
    }

    @Override
    public Student getStudent(int id) {

        System.out.println("getStudent id=" + id);
        logger.info("getStudent id=" + id);

        Student student = new Student();
        student.setId(id);
        student.setAge(22);
        student.setName("张胜男");
        return student;
    }

    @Override
    public void updateStudent(Student student) {
        System.out.println("updateStudent info:" + student);
        logger.info("updateStudent info:" + student);
    }

    @Override
    public void attendAllCourse(Student student) {
        if (!CollectionUtils.isEmpty(courseSet)) {
            for (CourseService service : courseSet) {
                service.attendCourse();
            }
        }
    }
}

调用学生上课接口,可以打印所有课程,说明CourseService所有的实现类都注册到集合courseSet

 




























































以上是关于Spring @Autowired注解用在集合上面,可以保持接口的所有实现类的主要内容,如果未能解决你的问题,请参考以下文章

spring注解集合

Spring注解@Autowired是如何工作的?

@Autowired 与@Resource的区别

spring笔记day-3

Spring core注解

详细解析@Resource和@Autowired的区别 , 以及@Qualifier的作用