美文网首页spring 相关
spring注解--自动注入

spring注解--自动注入

作者: aix91 | 来源:发表于2019-01-01 22:31 被阅读0次

自动装配

  1. @Autowired自动注入(Spring自动装配)
  • 优先按照类名注入
  • 如果容器中有多个相同的类,则会将属性的名称作为id取容器中查找
  • 使用@Qualifier指定要注入的bean的名字
  • 可以使用require=false来规定,bean在容器中是否可以不存在
  • @Primary 规定首选的bean。其优先级小于@Qualifier
  • 可以加在类名,set方法,构造器,参数上
  1. @Resource(java规范)
  • 默认按照属性的名称来装配的
  • 没有@Autowired的其他功能
  1. @Inject注解 (java规范)
  • 需要导入“javax.inject”包
  • 能使用@Primary, @Qualifier 但是不能使用require = false

实例

  1. 使用@ComponentScan方式注入BookDao 实例
@Repository
@Primary
public class BookDao {
    private String label;
    public BookDao() {
        this.label = "1";
    }
    public String getLabel() {
        return label;
    }
    public void setLabel(String label) {
        this.label = label;
    }
    @Override
    public String toString() {
        return "BookDao{" +
                "label='" + label + '\'' +
                '}';
    }
}
  1. 使用@Bean方式注入另一个BookDao实例
@Configuration
@ComponentScan(basePackages = {"com.test.tornesol.util.spring.spring_autowire"})
public class MainConfig {
    @Bean(name = "bookDao2")
    public BookDao bookDao() {
        BookDao bookDao = new BookDao();
        bookDao.setLabel("2");
        return bookDao;
    }
}
  1. 在service类里面注入BookDao
@Service
public class BookService {
    @Autowired
    @Qualifier("bookDao2")
    public BookDao bookDao;
}
  1. 打印注入的BookDao
public class AutowireDemo {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
        BookService bookService = context.getBean(BookService.class);
        Arrays.stream(context.getBeanDefinitionNames()).forEach(p -> System.out.println(p));
        System.out.println(bookService.bookDao);
    }
}
  1. 输出结果:注入的是bookDao2
BookDao{label='2'}

Note:

  1. 在注入bean时,被注入bean的class要有无参构造器。

相关文章

网友评论

    本文标题:spring注解--自动注入

    本文链接:https://www.haomeiwen.com/subject/fjpolqtx.html