如何理解Spring中的名词“注入”?

在使用Spring的注解方式时,常常会听到一个名词叫“注入”,其实这里完全可以理解为把某个属性值赋值到对应的引用数据类型变量中。“注入”一词主要用于属性的注入,而bean实例的创建往往没有“注入”一说。

在Spring IoC中主要提供了两个注解用于bean的创建和属性的注入,即@Component@Autowired

     ①这里@Component用在类声明上,用于告知Spring,比如当前创建的UserDaoImp类中,在后续的使用中,肯定是会需要UserDaoImp类的实例对象的,所以现在提供需要为当前UserDaoImp类创建一个实例(默认单例模式创建实例对象),实例名默认为当前类名首字母小写的形式,所以@Component就是在通知Spring你要预先给这个类实例化,所以接口与抽象类不能使用这个注解,因为他们没法实例化对象。

  ②而@Autowired则用在属性上,Spring检测到该注解之后就会在IoC容器中查找是否有与该属性相匹配的类或子类实例,有的话就注入到当前属性中,否则就会报错。例如,在UserService类中:

@Autowired  //根据类型进行注入
private UserDaoImp userdaoImp;   //为了区分实例化对象,所以将这里将字母D改为小写

此时在userDaoImp属性上标@Autowired,意味着Spring在看到该属性后,会到IOC容器中寻找是否存在UserDaoImp类的实例化对象,上面说到通过@Component已经创建了一个实例userDaoImp,所以将此实例化对象赋值给userdaoImp,即:

UserDaoImp userdaoImp = userDaoImp;

这个赋值的过程就被称为属性的“注入”。

 UserDao接口:

public interface UserDao {
    public void info();
}

UserDaoImp实现类:

@Component
public class UserDaoImp implements UserDao {
    @Override
    public void info() {
        System.out.println("info()..............");
    }
}

UserService类:

//注解中value的默认值为UserService的首字母为小写,也就是userService
@Service(value = "userService") //此处等同于xml配置中的<bean id="userService",class="com.maweirdos.service.UserService"/>
public class UserService {
    @Autowired  //根据类型进行注入
    @Qualifier(value = "userDaoImp")    //根据name名称进行注入
    private UserDaoImp userDaoImp;
    public void Add(){
        System.out.println("add()..............");
        userDaoImp.info();
    }
}

测试类:

@Test
    public void test(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        UserService userService = context.getBean("userService", UserService.class);
        userService.Add();
    }

输出结果:

add()..............
info()..............

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值