##Controller Service Dao(mapper)
Controller 调用Service, Service调用 DAO 模块之间耦合
new EmpServiceB
容器中放EmpServiceA, Controller需要对象去容器中找
如果要将实现类由EmpServiceA 切换为EmpServiceB,可以基于B对象在容器中创建一个对象,即使Service中实现类发生变化,Controller代码也不需要改动
①类交给IOC容器管理,在类上加注解 @Component
②Controller需要 empservice对象,给empService加上@Autowired注解
此时如果要切换实现类:EmpServiceA 切换到EmpServiceB,将A上面的 //@Component注释掉就可以
保留EmpServiceB上的@Component
Controller Service Repository 将对象交给IOC容器管理,默认封装了Component注解
不能用上面三个注解标识,就交给Component,典型的使用场景是工具类
申明一个Bean,不一定会生效,设计到组件扫描的问题
启动类自动加上了组件扫描注解,默认扫描范围是启动类所在包及其子包,如果有些Bean不在这个目录下,启动会失败,b比如dao代码
解决方法:自己加上ComponentScan(不推荐)
推荐:将所写的代码全部放到启动类及其子包下面
有两个EmpService的Bean,EmpServiceA,EmpServiceB:使用哪个?
程序启动时就报错:
(1)@Primary 设置优先级,想要哪个Bean生效,就在哪个Bean上加@Primary
(2)@Autowired配合@Qualifier(“empServiceA”), 加上bean的名字,默认类名首字母小写
jdk提供的