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. Luogu 2147 洞穴勘测 - LCT

    Solution $LCT$ 打上 $cut$ , $link$ 和 $finroot$ 即可 Code #include<cstdio> #include<cstring> ...

  2. tp5安装验证码

  3. Tomcat的目录结构及部署应用程序

    下载好的二进制的Tomcat,解压会看到7个目录,如下: bin 目录:Tomcat的脚本存放目录,如启动.关闭脚本等.其中 **.bat用于windows平台,**.sh用于Linux平台 conf ...

  4. JVM 目录

    JVM 目录 走进 JVM Java 虚拟机规范(Oracle 官网) Java 虚拟机规范(Java SE 7 中文版) (周志明等译) 周志明,深入理解Java虚拟机[M],机械工业出版社,201 ...

  5. sqli-labs:5-6,盲注

    思考1:当# --+都被过滤时,只能考虑闭合处理 思考2:union联合注入时必须先判断字段长度 eg. id=1' order by 3 and '1'='1 sqli5: 首先判断出对id经过了' ...

  6. c++11 stl 学习之 shared_ptr

    shared_ptr智能指针 shared_ptr 的声明初始化方式由于指针指针使用explicit参数 必须显示声明初始化shared_ptr<string> pNico = new s ...

  7. Vim on Mac Terminal

    2018-04-15 在Python 里面加标注, 发现Vim强大的两种用法, 比如要在1-5行加标注: 1. 用寻找和替代(basic search and replace),:1, 5s/^/# ...

  8. springMVC学习三 注解开发环境搭建

    第一步:导入jar包 第二步:配置DispatcherServlet  前端控制器 因为此处把DsipatcherServlet的映射路径配置成了"/",代表除了.jsp文件之外, ...

  9. transform.forward和vector3.forward

    Vector3.forward的值永远是(0,0,1)(这里的(0,0,1)是世界坐标的(0,0,1)),而transform.forward我们可以理解为其对应物体的z轴方向,是一个向量,而不是一个 ...

  10. kbmmw 中的进程管理小工具

    kbmmw 5.6.20 发布了,本版本带来一个小功能,就是可以在kbmmw 应用里面建立和管理进程, 虽然你可以直接调用windows api 做类似的事情,但是kbmmw 里面简化了操作,也加强了 ...