Spring IOC 07 依赖注入DI

1、使用@Autowired注解实现根据类型实现自动装配

(1)在配置文件中添加

<context:component-scan base-package="SpringIoc03">
</context:component-scan>

(2)使用@Autowired

@Service
public class BookService {

    @Autowired
    private BookDao bookDao;

    public void save(){
        System.out.println("bookService...正在调用dao帮你保存图书。。。");
        bookDao.saveBook();
    }

}

2、@Autowired原理

2.1、若此时有

@Autowired
private BookService bookService;

则先按照类型去容器中找到对应的组件,bookService = ioc.getBean(bookService.class)
(1)找到一个,则赋值
(2)未找到,抛异常
(3)找到多个?
按照变量名作为id继续装配:BookService(bookService)和BookServiceExt(bookServiceExt)
此时,按照bookService自动装配
2.2、若此时有

@Autowired
private BookService bookServiceExt2;

并且找到BookService(bookService)和BookServiceExt(bookServiceExt)
(1)匹配上,则装配
(2)未匹配,则报错
原因:根据成员变量名作为id还是找不到bean,
可以使用@Qualifier注解明确指定目标bean的id

为了解决上述问题可以
使用@Qualifier(“bookService”)指派一个新id,此注解也可以为方法的参数进行注解。
1)、找到:装配
2)、找不到:报错

3、@Autowired、@Resource、@Inject的区别

@Autowired:最强大;是Spring自己的注解
@Resource:j2ee,java的标准,其扩展性更强,若切换成另一个容器框架,@Resource依旧还可以使用,但@Autowired不行
@Inject:EJB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值