下面完成,将Dao类的对象注入到Service类进行使用。
注解实现属性依赖注入,将注解加在setXxx方法上 或者 属性定义上 !(任选其一,省代码了)
第一种: 使用@Value 结合SpEL ---- spring3.0 后用
//@Component(value="customer")
@Service(value="customer")
public class CustomerService {
//简单类型的成员变量
@Value("Rose")//参数的值简单类型
private String name="Jack";
//在属性声明上面注入,底层自动还是生成setCustomerDao()
//第一种: 使用@Value 结合SpEL ---- spring3.0 后用
//其中customerDao表示
/**第一种: 使用@Value 结合SpEL ---- spring3.0 后用*/
//@Value(value="#{customerDao}")
private CustomerDao customerDao;
@Value(value="#{customerDao}")
public void setCustomerDao(CustomerDao customerDao) {
this.customerDao = customerDao;
}
//保存业务方法
public void save(){
System.out.println("CustomerService业务层被调用了。。。");
System.out.println("name:"+name);
customerDao.save();
}
}
第二种:使用@Autowired 结合 @Qualifier
单独使用@Autowired ,表示按照类型注入,会到spring容器中查找CustomerDao的类型,对应
//第二种:使用spring的@Autowired
@Autowired//默认按照类型注入
private CustomerDao customerDao;
使用@Autowired + @ Qualifier 表示按照名称注入,会到spring容器中查找customerDao的名称,对应
//第二种:使用spring的@Autowired 结合 @Qualifier
@Autowired//默认按照类型注入的
@Qualifier("customerDao")//必须配合@Autowired注解使用,根据名字注入
private CustomerDao customerDao;
第三种: JSR-250标准(基于jdk) 提供注解@Resource
单独使用@Resource注解,表示先按照名称注入,会到spring容器中查找customerDao的名称,对应
如果没有找到,则会按照类型注入,会到spring容器中查找CustomerDao的类型,对应
//第三种: JSR-250标准(jdk) 提供@Resource
@Resource//默认先按照名称进行匹配,再按照类型进行匹配
private CustomerDao customerDao;
如果@Resource注解上添加name名称
使用@Resource注解,则按照名称注入,会到spring容器中查找customerDao的名称,对应
如果没有找到,抛出异常。
//第三种: JSR-250标准(jdk) 提供@Resource
@Resource(name="customerDao")//只能按照customerDao名称进行匹配
private CustomerDao customerDao;
第四种: JSR-330标准(jdk) 提供 @Inject (麻烦点)
需要先导入 javax.inject 的 jar ,在课前资料中查找。
使用@Inject注解,则按照类型注入,
//第四种: JSR-330标准(jdk) 提供 @Inject ,配合@Named注解
@Inject//默认按照类型注入
private CustomerDao customerDao;
使用@inject和@Named注解,则按照名称注入
//第四种: JSR-330标准(jdk) 提供 @Inject ,配合@Named注解
@Inject//默认按照类型注入
@Named("customerDao")//按照名字注入,必须配合@Inject使用
private CustomerDao customerDao;