国王陛下万万岁

导航

 

@Autowired用来配置类与类之间的依赖关系,即,一个类要调用另一个类的对象时就可以通过这个注解来自动装配。

1.BookDaoImpl类:

package com.oxygen.dao.impl;

import com.oxygen.dao.BookDao;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;

@Repository("bookDao")
@Scope("singleton")
public class BookDaoImpl implements BookDao {

    public void save() {
        System.out.println("Book Dao Save...");
    }

}

 

2.BookServiceImpl类:

这个类定义了一个private BookDao bookDao,并且用bookDao调用了BookDao类里面的方法。

也就是说BookServiceImpl与BookDaoImpl有依赖关系,可以用@Autowa\ired注解自动把BookDao的对象注入到BookService当中。

注意下图,@Autowired注解时放在setter方法的。其实这个注解放在setter方法或者放在类对象上都可以使用。

package com.oxygen.service.impl;

import com.oxygen.dao.BookDao;
import com.oxygen.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class BookServiceImpl implements BookService {
private BookDao bookDao;

//放在setter方法上 @Autowired public void setBookDao(BookDao bookDao) { this.bookDao = bookDao; } public void save() { System.out.println("Book Service save..."); bookDao.save(); } }

 

3.测试@Autowired注解:

可以看到,即使把通过容器获取BookDao对象的两句注释掉,代码也能正常运行。这说明@Autowired注解能够自动生成对象。

 

 

3.@Autowired注解没有setter方法也可自动装配.

package com.oxygen.service.impl;

import com.oxygen.dao.BookDao;
import com.oxygen.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class BookServiceImpl implements BookService {

    //注意:没有setter方法Autowired也能自动装配
    @Autowired
    private BookDao bookDao;

    public void save() {
        System.out.println("Book Service save...");
        bookDao.save();
    }
}

 

4.@Autowired注解还可以结合@Qualifire注解使用,按bean的名称来注入。

加入,我们有两个BookDao类型的bean,此时就需要按名称来注入。并且不要忘记给bean取个名字。

 @Autowired
 @Qualifier("bookDao1")
 private BookDao bookDao1;

  

注意:

  • 自动装配基于反射创建对象并暴力对应属性为私有属性初始化数据,因此无需提供setter方法。
  • 自动装配建议使用无参构造方法(默认),如果不提供无参构造方法,请提供唯一构造方法。
  • autowired是对引用类型进行自动装配注入。
  • 对简单类型自动装配注入要使用@Value注解。
posted on 2022-10-23 01:45  国王陛下万万岁  阅读(242)  评论(0编辑  收藏  举报