为何需要@Autowired注入,以及@Autowired注释的作用

spring可以自动帮你把Bean里面引用的对象的setter/getter方法省略,它会自动帮你set/get(其实是通过反射技术实现的)。
@Autowired注释进行自动注入时,spring容器中匹配的候选Bean数目必须有且仅有一个。
当找不到一个匹配的Bean时,spring容器将抛出BeanCreationException异常,并指出必须至少拥有一个匹配的Bean。
如果spring容器中拥有多个候选Bean,spring容器在启动时也会抛出BeanCreationException
这个时候就可以借助@Qualifier注释指定注入Bean的名称,这样@Autowired遇到多个候选Bean的问题也就解决了。

以上内容参考:https://blog.csdn.net/STUDENTstudent123/article/details/86774033

下面通过代码进行解释说明:

/*很多人疑惑,为什么需要注入Customer,因为下面的语句需要用到。
  service层通过调用CustomerMapper的对象,进而调用addCustomer方法
  因为CustomerMapper类里面有很多方法,我们进行数据库操作室往往只需要操作部分方法,
  所以,通过service层进行操作,CustomerMapper里面的具体方法*/

package com.sm.service;

import org.omg.CORBA.PUBLIC_MEMBER;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.sm.mapper.CustomerMapper;
import com.sm.po.Customer;

@Service
@Transactional
public class CustomerServiceImpl implements CustomerService {
	// 注解注入CustomerMapper
	@Autowired
	private CustomerMapper customerMapper;

	public void addCustomer(Customer customer) {
/*很多人疑惑,为什么需要注入Customer,因为下面的语句需要用到。
  service层通过调用CustomerMapper的对象,进而调用addCustomer方法
  因为CustomerMapper类里面有很多方法,我们进行数据库操作室往往只需要操作部分方法,
  所以,通过service层进行操作,CustomerMapper里面的具体方法*/
		this.customerMapper.addCustomer(customer);
		int i = 1/0;
	}
}

欢迎吐槽!!!

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐