Spring全注解之自动装配的方式以及使用过程

创建接口UserDao

/**
 * @Author 喜欢编程的夏先生
 * @Date 2022-06
 */

public interface UserDao {

     void add();
}

创建两个实现了接口UserDao的实现类

@Repository
public class UserDao1 implements UserDao {
    @Override
    public void add() {
        System.out.println("userDao1's add......");
    }
}

@Repository
public class UserDao2 implements UserDao {
    @Override
    public void add() {
        System.out.println("userDao2's add......");
    }
}

创建UserService类并注入UserDao

@Service
public class UserService {

    @Autowired
    private UserDao userDao1;

    public void insert(){
        System.out.println("userService's insert......");
        userDao1.add();
    }
}

创建测试方法

    @Test
    public void test1(){
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig1.class);

        UserService service = applicationContext.getBean(UserService.class);
        service.insert();
    }

运行结果

 上面我们可以看到,我们在UserService里面注入了UserDao的对象。并且这个对象的名字叫userDao1,此时容器会根据名字与第一个UserDao的实现类也就是UserDao1进行匹配。如果我们在UserService里面的UserDao对象的名字修改为UserDao2,那么对象就会与UserDao2进行匹配且运行结果如下

使用@Qualifier指定与之匹配的对象

@Service
public class UserService {

    @Autowired
    @Qualifier("userDao2")
    private UserDao userDao1;

    public void insert(){
        System.out.println("userService's insert......");
        userDao1.add();
    }
}

 

 运行测试类结果如下

使用@Primary注解指定优先级 

我们可以在UserDao2上加入注解@Primary

 

 修改Service如下

 运行测试方法输出如下

当然了,当我们使用了@Primary注解的时候,我们也可以再使用 @Qualifier来指定

使用@Resource和@Inject注入属性

@Resource注解和@Inject注解属于Java的,上面的注解是使用Spring的。

 修改UserService中的注解。我们看到此时的属性名为userDao,而我们的UserDao2上有@Primary注解,因此此时注入的时UserDao2的对象。

如果我们代码是下面这样的话

 那么不管有没有@Primary注解,容器都会根据名字进行分配,即注入的对象为UserDao1的对象。

当然了,我们可以通过如下形式来指定名字。

如果想使用@Inject注解来注入对象首先你得先加入如下的pom依赖

<!-- https://mvnrepository.com/artifact/javax.inject/javax.inject -->
<dependency>
    <groupId>javax.inject</groupId>
    <artifactId>javax.inject</artifactId>
    <version>1</version>
</dependency>

 功能都是类似的,这里就不再赘述。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢编程的夏先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值