springboot中service层注⼊的是实现类,但Controller层接收的
是接⼝
我们习惯这样编写代码:
在service层写接⼝,然后⽤实现类去实现接⼝,并且将实现类注⼊到容器中,
@Service
public class AccountServiceImpl implements AccountService {}
在controller层却是⽤接⼝操作service的bean的⽅法,
@Autowired
private AccountService userService;
为神魔这样?spring boot是啥
理解:
1)注⼊的就是实现类,只不过拿接⼝来接收,接受的类型为接⼝,⾯向接⼝编程,那么为何要⾯向接⼝编程?这就涉及到使⽤接⼝做代理,因为通过@autowired的对象是通过接⼝的⽅式会使⽤jdk动态代理,jdk动态代理只能对实现接⼝的类⽣成代理,⽽不能针对类。
2)注⼊的是实现类对象,接收的是接⼝;理解为多态;
如果⼀个service接⼝有多个实现类呢?
controller类中使⽤@resource并通过byname的⽅式注⼊,不要⽤@autowired这种通过类型的⽅式了,
Service层(此时有两个接⼝实现类)
@Service("PCIImpt1")
class PCIImpt1 imeplements PCI{}
@Service("PCIimpt2")
class PCIImpt2 imeplements PCI{}
Controller层
@Resource(name="PCIimpt2") //填PCIimpt1,注⼊PCIimpt1实现类,填PCIimpt2,则注⼊PCIimpt2实现类
private PCI pci; //注⼊接⼝以Resource⼿动指定接收
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论