Bean装配之@Autowired注解

Posted 二十年后20

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bean装配之@Autowired注解相关的知识,希望对你有一定的参考价值。

@Required(不常用)

@Autowired(常用)

下面用例子解释以上内容:

@Autowired注解的三种方式如下,第一种是直接在属性名上加注解,这样就可以不用在写set方法进行注入,这种方式与set方式作用一样;第二种是在set方法上加注解;第三种是在构造器上加注解

测试代码如下:

 xml配置文件正常即可:

图解:可以在当前类中,声明ApplicationContext的引用,然后可以用@Autowired进行注解,这时候可以在当前类中得到这个容器,并且可以使用这个容器了

图解:

数组也就是Set或List等,提供所有特定类型的bean是指:当Set中声明MovieCatalog时,当前的ApplicationContext中所有是Set泛型中声明类型的这种bean或它的子类,都可以被@Autowired注解,把这些bean的实例放到当前的集合当中。

这里的key也就是所有bean的id,value也就是bean的对象,同时我们希望放在Map或者是Set和List的集合中,这种bean的实例是有顺序的,可以实现以上接口来实现。

 例子如下:

interface的两个实现类:

调用类实现:

 1 @Component
 2 public class BeanInvoker {
 3     
 4     //可以利用@Autowired注解,将两个实现类的实例同时注入list或map中
 5     //list中会被注解进来bean的实例,只有bean的对象
 6     @Autowired
 7     private List<BeanInterface> list;
 8     
 9     //map中会被注解进来bean的id和实例,bean的id就是class的类名第一个字母小写
10     @Autowired
11     private Map<String, BeanInterface> map;
12     
13     //将@Qualifier与@Autowired一起用,可以指定注入的某一个实现类的实例
14     @Autowired
15     @Qualifier("beanImplOne")
16     private BeanInterface beanInterface;
17     
18     public void say() {
19         if(null != list && 0 != list.size()) {
20             System.out.println("list...");
21             for(BeanInterface bean:list) {
22                 System.out.println(bean.getClass().getName());
23             }
24         }
25         else {
26             System.out.println("List<BeanInterface> list is null....");
27         }
28         
29         System.out.println();
30         
31         if(null != map && 0 != map.size()) { 
32             System.out.println("map...");
33             for(Map.Entry<String, BeanInterface> entry:map.entrySet()) {
34                 System.out.println(entry.getKey() + "......" + entry.getValue().getClass().getName());
35             }
36         }
37         else {
38             System.out.println("Map<String, BeanInterface> map is null...");
39         }
40         
41         System.out.println();
42         
43         if(null != beanInterface){
44             System.out.println(beanInterface.getClass().getName());
45         }
46         else {
47             System.out.println("beanInterface is null...");
48         }
49     }
50 }
View Code

测试类:

注释:当某个接口有多个实现类时,可以将@Qualifier与@Autowired一起用, 指定应该注入的对象的实例。@Qualifier中应该是要指定注入的bean的id

打印结果如下:

 

 

 

 

以上是关于Bean装配之@Autowired注解的主要内容,如果未能解决你的问题,请参考以下文章

(转)java之Spring(IOC)注解装配Bean详解

Spring 源码@Autowired注解实现原理(Spring Bean的自动装配)

Spring 源码@Autowired注解实现原理(Spring Bean的自动装配

Spring学习-----Spring使用@Autowired注解自动装配

Spring 源码(九)@Autowired注解实现原理(Spring Bean的自动装配)

Spring框架bean的配置:基于注解的配置,Autowired 自动装配 Bean,泛型依赖注入