spring学习笔记(13)——注解Autowired自动装配

使用Autowired

  • 一般情况下,controller和service是有关联关系的,service和DAO层是有关联关系的,我们使用autowired注解,在controller中装配service,在service中装配reponsitory
package com.zj.annotation.service;

public interface TestService {
    void add();
}
package com.zj.annotation.service;

import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

@Service 
public class TestServiceImpl implements TestService {

    @Override
    public void add() {
        System.out.println("service impl add.....");
    }

}
@Controller
public class TestController {

    @Autowired
    private TestService testService;

    public void excute(){
        testService.add();
    }
}
  • 注意,使用autowired的前提是TestService的bean归IOC容器管理(使用注解或配置文件配置的方式配置了该bean)
  • 如果没有创建testService这个bean,那么将抛异常
  • 也可以使用required=false来声明可以不创建该bean:@Autowired(required=false)
  • autowired也可以用于方法
@Controller
public class TestController {

    private TestService testService;

    @Autowired
    private void getTestService(TestService testService) {
        this.testService = testService;
    }

    public void excute(){
        testService.add();
    }
}

这种写法和上面效果一样

细节注意

  • 如果有多个类实现了TestService这个接口,那么autowired会自动装配哪个?

    根据实现类的name,如其中一个实现类:@Service(“testService”),那么就自动装配这个实现类,因为private TestService testService;

  • 如果有多个实现类,但是没有指明name怎么办?

    如果没有指明name,将会抛异常,但是我们可以使用@Qualifier注解来说明使用哪一个实现类

@Controller
public class TestController {

    @Autowired
    @Qualifier("testServiceImpl2")
    private TestService testService;

    public void excute(){
        testService.add();
    }
}

实现类为TestServiceImpl2,bean的name(id)默认为testServiceImpl2

  • @Qualifier也可以用于方法,或者方法的参数,如:
    private TestService testService;

    @Autowired
    @Qualifier("testServiceImpl2")
    private void getTestService(TestService testService) {
        this.testService = testService;
    }

或者

    private TestService testService;

    @Autowired
    private void getTestService(@Qualifier("testServiceImpl2")TestService testService) {
        this.testService = testService;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值