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注解用在集合上面,可以保持接口的所有实现类的更多相关文章

  1. Spring课程 Spring入门篇 4-3 Spring bean装配(下)之Autowired注解说明2 集合运用

    课程链接: 本节主要讲了以下几块内容 1 注解相关解析 2 代码演练 集合for循环的使用 2.1 list集合应用 2.2 map集合应用 2.3 集合排序(只对list有效,对map无效(list ...

  2. Spring @Autowired 注解 学习资料

    Spring @Autowired 注解 学习资料 网址 Spring @Autowired 注解 https://wiki.jikexueyuan.com/project/spring/annota ...

  3. Spring @Autowired 注解自动注入流程是怎么样?

    面试中碰到面试官问:"Spring 注解是如果工作的?",当前我一惊,完了这不触及到我的知识误区了吗?,还好我机智,灵机一动回了句:Spring 注解的工作流程倒还没有看到,但是我 ...

  4. Spring@Autowired注解

    @Autowired注解可以对成员变量.方法和构造函数进行标注,来完成自动装配的工作. 注意:@Autowired默认是按照类型来注入的. 看下面的例子:例子是以对成员变量(field)为例进行的 p ...

  5. Java集合框架之四大接口、常用实现类

    Java集合框架 <Java集合框架的四大接口> Collection:存储无序的.不唯一的数据:其下有List和Set两大接口. List:存储有序的.不唯一的数据: Set:存储无序的 ...

  6. Spring@Autowired注解与自动装配

    1   配置文件的方法 我们编写spring 框架的代码时候.一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量.并且要配套写上 get 和 set方法. Boss ...

  7. 【转】Spring@Autowired注解与自动装配

    1   配置文件的方法 我们编写spring 框架的代码时候.一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量.并且要配套写上 get 和 set方法. Boss ...

  8. Spring @Autowired注解在非Controller中注入为null

    问题描述 今天在写一个工具类,里面用了@Autowired注入了StringRedisTemplate以及RedisTemplate时,在template.opsForValue().set(key, ...

  9. Spring@Autowired注解与自动装配(转发)

    1   配置文件的方法 我们编写spring 框架的代码时候.一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量.并且要配套写上 get 和 set方法. Boss ...

随机推荐

  1. [Python]Python章1 Python中_的故事

    _xx 单下划线开头 Python中没有真正的私有属性或方法,可以在你想声明为私有的方法和属性前加上单下划线,以提示该属性和方法不应在外部调用.如果真的调用了也不会出错,但不符合规范. 本文为译文,版 ...

  2. SpringBoot中文乱码解决方案

    转载:https://blog.csdn.net/wangshuang1631/article/details/70753801 方法一,修改application.properties文件 增加如下 ...

  3. [C#]做服务使用Process启动外部程序没窗体

    这几天会到一个需要,要时时侦测文件生成,并上传到Server上,侦测文件生成使用的FileSystemWatch.但是时时运行遇到了问题,程序可能会人为退出或者意外终止,使用一个进程监控程序的监程,也 ...

  4. GG镜像导航

    供程序员使用. http://dir.scmor.com/google/

  5. 42.OC中instancetype与id的区别

    区别: 在ARC(Auto Reference Count)环境下: instancetype用来在编译期确定实例的类型,而使用id的话,编译器不检查类型,运行时检查类型 在MRC(Manual Re ...

  6. Win7 VS2015环境编译Libpng

    第3次编译Libpng依然想不起任何东西,为了不浪费第4次的时间... http://libpng.com/pub/png/libpng.html http://www.zlib.net/ 解压两个压 ...

  7. linux利用命令将一个盘上的所有复制到另一个盘上

    1.fdisk -l 查看硬盘状况 2.将目标盘利用mount挂载 3.查看硬盘使用状况,看目标盘是否有足够的空间:df -h 4.如果足够,利用dd命令将源盘数据拷贝到目标盘:dd if=/dev/ ...

  8. ext中对json数据的处理解析

    看贴:http://blog.csdn.net/xieshengjun2009/article/details/5959687

  9. c# 抽象类和抽象方法

    参考:http://www.runoob.com/csharp/csharp-polymorphism.html https://zhidao.baidu.com/question/587686949 ...

  10. git 版本库拆分和subtree用法

    git 版本库拆分 原文地址: https://segmentfault.com/a/1190000002548731 程序员最爽的事情是什么?删删删!所有项目本来都很苗条的,时间长了难免有一些越搞越 ...