1、配置文件:
package com.zdc.sp.autowire.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import com.zdc.sp.autowire.dao.BookDao;
/**
* 自动装配:
* spring 利用依赖注入(DI),完成对IOC容器中各个组件的依赖关系赋值;
* 1)@Autowired:自动注入
* 1)、默认优先按照类型去找容器中找对应组件:
* 2)、如果找到多个相同类型的组件,再将属性的名称作为组件的id去容器中找
* 3)使用@Qualifier("bookDao2") ;使用@Qualifier指定需要装配的组件的ID,而不是使用属性名
* 4)、自动装配默认一定要将属性赋值好,没有就会报错;可以使用@Autowired(required=false);required设置成false;
* 就不会报错了。
* 5)、@Primary:让spring进行自动装配的时候,默认使用首先的bean;
* 也可以继续使用@Qualifier指定需要装配的bean的名字
*
*/
@Configuration
@ComponentScan({"com.zdc.sp.autowire.dao","com.zdc.sp.autowire.service","com.zdc.sp.autowire.controller"})
public class AutowireConfig1 {
@Primary
@Bean("bookDao2")
public BookDao bookDao(){
BookDao bookDao = new BookDao();
bookDao.setFlag("2");
return bookDao;
}
}
2、dao类:
package com.zdc.sp.autowire.dao;
import org.springframework.stereotype.Repository;
//名字默认类名首字母小写
@Repository
public class BookDao {
//该标记作为后面测试用,为后面含有多个相同bean类型的时候是调用哪一个bean
private String flag = "1";
public String getFlag() {
return flag;
}
public void setFlag(String flag) {
this.flag = flag;
}
@Override
public String toString() {
return "BookDao [flag=" + flag + "]";
}
}
3、servcie:
package com.zdc.sp.autowire.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import com.zdc.sp.autowire.dao.BookDao;
@Service
public class BookService {
@Qualifier("bookDao2")
@Autowired(required=false)
private BookDao bookDao;
public void print(){
System.out.println(bookDao);
}
@Override
public String toString() {
return "BookService [bookDao=" + bookDao + "]";
}
}
4测试类:
package com.zdc.sp.autowire.test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.zdc.sp.autowire.config.AutowireConfig1;
import com.zdc.sp.autowire.service.BookService;
public class AutowireTest {
public static void main(String[] args) {
//获取配置文件
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AutowireConfig1.class);
BookService bookService = context.getBean(BookService.class);
System.out.println(bookService);
@Resorce(JSR250规范)-----》属于Java规范注解;
可以和@Autowried一样实现自动装配功能;默认是按照组件名称进行装配的;
@Injecct(JSR330规范)--------》属于Java规范注解
需要导入javax.inject的包,和@Autowried的功能一样,但是没有required=false功能