Spring_4_注解注入和@Autowired注解

使用注解加入到容器中的组件,和使用配置加入到容器中的组件行为都是默认的一样的。

1、使用注解标识组件:
①普通组件:@Component
标识一个受Spring IOC容器管理的组件
②持久化层组件:@Respository
标识一个受Spring IOC容器管理的持久化层组件
③业务逻辑层组件:@Service
标识一个受Spring IOC容器管理的业务逻辑层组件
④表述层控制器组件:@Controller
标识一个受Spring IOC容器管理的表述层控制器组件
⑤组件命名规则
[1]默认情况:使用组件的简单类名首字母小写后得到的字符串作为bean的id
[2]使用组件注解的value属性指定bean的id

注意:事实上Spring并没有能力识别一个组件到底是不是它所标记的类型,即使将@Respository注解用在一个表述层控制器组件上面也不会产生任何错误,所以@Respository、@Service、@Controller这几个注解仅仅是为了让开发人员自己明确当前的组件扮演的角色。

2、组件的id默认就是组件的类名首字母小写,可以进行修改

   @Repository("bookdaoHaha)
          public class bookDao(){}
     

3、组件的作用域:默认就是单例的,可以进行修改

  @Scope(value = "prototype")

@Autowired原理:默认根据@Autowired注解标记的成员变量名作为id查找bean,进行装配★

   @Autowired
    private BookService bookService;

1)先按类型去容器中找到对应的组件:bookService = ioc.getBean(“BookService.class”);

	1)找到一个:找到就赋值
	2)没有找到:抛异常
	3)找到多个?装配上?
	     1)按照变量名作为id继续匹配;BookService(bookService)、BookServiceExt(bookServiceExt)
	             @Autowired
	              private BookService bookServiceExt2;
                  1)匹配上:装配
                  2)没有匹配上?报错
                      原因:因为我们按照变量名作为id进行匹配的
                      使用@Qualifier("bookServiceExt")指定一个新的字符串作为id
                                    1)找到:装配
                                    2)找不到:报错;

发现Autowired标注的自动装配的默认属性是一定装配上的,找不到就报错;这个时候可以修改required属性, 找到就装配,找不到就拉倒 @Autowired(required=false)这样子不会报錯了


面试题:@Autowired @Resource @Inject区别和联系

@Autowired @Resource @Inject; 都是自动装配的意思
@Autowired:最强大:Spring自己的注解
@Resource: j2ee中的,java的标准
@Resource:扩展性更强;因为是java的标准 若切换成另外一个容器框架(所幸整个容器框架抛开EJB不说,容器框架只有SPring一家,没有别家在做这个事),@Resource还是可以使用的,@Autowired就不行了
@Inject:
@Inject和@Autowired注解一样也是按类型注入匹配的bean,但没有reqired属性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值