上篇文章主要讲了@Value的赋值:普通赋值,@Value("#{}"),spEl表达式赋值,@Value("&{}")读取配置文件赋值:
这篇文章主要介绍spring的自动装配,DI依赖注入,各个组件赋值,完成在IOC容器的组件调用。常用的@Autowird按类型去ioc容器中找组件注解,与之对应的有个@Resource按名称注解以后在讲解。
1、@Autowired
1)、默认优先[按照类型]去ioc容器中找组件 AnnotationConfigApplicationContext.getBean(BookDao.class);
2)、若此类型在容器中找到两个以上组件,则加载此方法找默认的名称AnnotationConfigApplicationContext.getBean("bookDao");
3)、可以和@Qualifier("组件名")组合使用,直接指定组件名。
4)、加载的@Autowired(required=false)必须在容器中存在此组件,IOC容器不存在则报错,默认为true,也可以指定为false,则不会报错。
5)、@Primary注解也可以指定主加载的组件,这时候就默认加载此主键的组件,除非@Qualifier指定其他组件。
/*** @Autowired* Spring 的自动装配:DI依赖注入,各个组件之间的装配赋值,完成对IOC容器里各个对象之间赋值调用。* 1)、默认优先按照类型去ioc容器中找组件** @author keying* @Autowired*/@Configuration@ComponentScan(value = {"com.alibaba.controller","com.alibaba.service","com.alibaba.dao"})public class ConfigOfAutowired {}
@Controllerpublic class BookController {@Autowiredprivate BookService bookService;public void print() {System.out.println(bookService);}}/*** @author keying* 加载进的ioc容器里的名字:默认首字母小写*/@Repositorypublic class BookDao {}@Servicepublic class BookService {@Autowiredprivate BookDao bookDao;public void print() {System.out.println("BookService注入的bookDao:" + bookDao);}@Overridepublic String toString() {return "BookService{" +"bookDao=" + bookDao +'}';}}
public class IOCTestAutowired {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ConfigOfAutowired.class);@Testpublic void test1() {//getBeanNames(applicationContext);BookService bookService = applicationContext.getBean(BookService.class);BookDao bookDao = applicationContext.getBean(BookDao.class);System.out.println("bookService:" + bookService);System.out.println("bookDao:" + bookDao);applicationContext.close();}

2、@Qualifier
@Servicepublic class BookService {@Autowired@Qualifier("bookDao2")private BookDao bookDao;public void print() {System.out.println("BookService注入的bookDao:" + bookDao);}@Overridepublic String toString() {return "BookService{" +"bookDao=" + bookDao +'}';}}
/*** @author keying* 加载进的ioc容器里的名字:默认首字母小写*/@Repositorypublic class BookDao {private String lable = "1";public String getLable() {return lable;}public void setLable(String lable) {this.lable = lable;}@Overridepublic String toString() {return "BookDao{" +"lable='" + lable + '\'' +'}';}}
@Testpublic void test1() {//getBeanNames(applicationContext);BookService bookService = applicationContext.getBean(BookService.class);//BookDao bookDao = applicationContext.getBean(BookDao.class);System.out.println("bookService:" + bookService);//System.out.println("bookDao:" + bookDao);applicationContext.close();}
在Config配置文件里用@Bean注解新注册一个bookDao2组件,给BookDao类加一个lable字段,
1)、若加载的默认bookDao对象,则会打印lable为1
2)、若加载的bookDao对象,Autowird按类型加载,则需要用@Qualifier注解在BookService类指定加载的名称。

文章转载自后端从入门到精通,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




