bean的注入问题

在service的接口中添加注解还是在实现类impl?
答:@Service注解是标注在实现类上的,因为@Service是把spring容器中的bean进行实例化,也就是等同于new操作,只有实现类是可以进行new实例化的,而接口则不能,所以是加在实现类上的。

Mybatis 接口编程中dao 层接口没有产生bean的注解, 为什么能被实例化为bean?
答:https://blog.csdn.net/java280580332/article/details/72123890
自己理解:实际上不是接口实例化,而是接口的实现类被实例化,框架底层会创建dao层接口的实现类,并且声明该类为一个bean,注入Ioc容器中。类似于service层有实现类,并用@Service修饰,就会将该实现类注入到ioc容器中。后面controller层用 @Autowired调用的时候,会直接从ioc容器中获取。

Controller获取实例的过程
使用@Autowired,程序在spring的容器中查找类型时TestService的bean,刚好找到有且只有一个此类型的bean,即TestServiceImpl,所以就把testServiceImpl自动装配到了Controller的实例TestService中。

@Autowired作用:
自动装配。创建应用对象之间协作关系的行为称为装配。也就是说当一个类A的属性中声明了另一个类B的对象,A实例化时,需要为A的属性B进行实例化。这就是装配。

1.网上理解:自动转配会自动将对象属性实例化,实例化对象是它的实现类。
2.自己理解:@Autowired会从ioc容器中找到bean(实例化对象),并且将bean地址赋值给一个变量。
在A类中声明属性B时加上注解@Autowired,A实例化时spring会自动从容器中调动B的实例。为了让spring能从容器中调用B的实例,需在B的类声明上能产生Bean的注解。如果B是一个接口(无法实例化对象),则会调用B的实现类创建一个对象供A类使用。

能产生Bean的注解有:
@Component;@Repository;@Controller;@Service;@Configration前五种只能对类使用。
@Bean (特殊,可对方法注解。@Bean注解需在上方五个注解的类中才生效,例如下:)

@component作用:
定义一个bean,并实例化,并放到ioc容器中,相当于配置文件中的<bean id="" class=""/>。

以上参考:
https://blog.csdn.net/java280580332/article/details/72123890
https://www.cnblogs.com/JuncaiF/p/11153254.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值