Spring复杂类型数据依赖注入

下面完成,将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表示节点id的属性值

    /**第一种: 使用@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的类型,对应,class的属性值,如果找到,可以匹配。

    //第二种:使用spring的@Autowired

    @Autowired//默认按照类型注入

    private CustomerDao customerDao;

         使用@Autowired + @ Qualifier 表示按照名称注入,会到spring容器中查找customerDao的名称,对应,id的属性值,如果找到,可以匹配。

   //第二种:使用spring的@Autowired 结合 @Qualifier

    @Autowired//默认按照类型注入的

    @Qualifier("customerDao")//必须配合@Autowired注解使用,根据名字注入

    private CustomerDao customerDao;

 

第三种: JSR-250标准(基于jdk) 提供注解@Resource

    单独使用@Resource注解,表示先按照名称注入,会到spring容器中查找customerDao的名称,对应,id的属性值,如果找到,可以匹配。

如果没有找到,则会按照类型注入,会到spring容器中查找CustomerDao的类型,对应,class的属性值,如果找到,可以匹配,如果没有找到会抛出异常。

    //第三种: JSR-250标准(jdk) 提供@Resource

    @Resource//默认按照名称进行匹配,再按照类型进行匹配

    private CustomerDao customerDao;

 

如果@Resource注解上添加name名称

    使用@Resource注解,则按照名称注入,会到spring容器中查找customerDao的名称,对应,id的属性值,如果找到,可以匹配。

    如果没有找到,抛出异常。

    //第三种: JSR-250标准(jdk) 提供@Resource

    @Resource(name="customerDao")//只能按照customerDao名称进行匹配

    private CustomerDao customerDao;

第四种: JSR-330标准(jdk) 提供 @Inject (麻烦点)

         需要先导入 javax.inject 的 jar ,在课前资料中查找。

Spring复杂类型数据依赖注入_第1张图片

    使用@Inject注解,则按照类型注入,

    //第四种: JSR-330标准(jdk) 提供 @Inject ,配合@Named注解

    @Inject//默认按照类型注入

    private CustomerDao customerDao;

    使用@inject和@Named注解,则按照名称注入

    //第四种: JSR-330标准(jdk) 提供 @Inject ,配合@Named注解

    @Inject//默认按照类型注入

    @Named("customerDao")//按照名字注入,必须配合@Inject使用

    private CustomerDao customerDao;

你可能感兴趣的:(java)