1.组件装配

<context:component-scan>元素还会自动注册AutowiredAnnotaionBeanPostProcessor实例,这是一个bean的后置处理器,该实例可以自动装配具有@Autuwired和@Resource、@Inject注解的属性(前提是在容器当中要自动装配的bean已经存在),其中@Autowired是最常用的。

2.@Autowired注解

@Autowired注解自动装配具有兼容类型的单个Bean属性,构造器,普通字段(即使是非public),一切具有参数的方法都可以应用@Autowired注解放在构造器上也是没有问题的。

1 private UserService userService;
2 @Autowired
3 public void setUserService(UserService userService) {
4     this.userService = userService;
5 }

@AutowiredIOC使用时应该注意以下几点:

  1)使用@Autowired,Spring如果如果有这个bean直接拿,如果没有则会报错,注意@Autowired是按照类型注入的。

  2)默认情况下,所有使用autowired注解的属性都需要被设置,当spring找不到配置的bean装配属性时,会抛出异常,某一属性允许不被设置,可以设置

  3)@Autowired注解的required属性为false

  4)默认情况下,当IOC容器里存在多个类型兼容的bean(同一类型或子类)时,通过类型自动装配将无法工作,此时可以在@Qualifiter注解里提供Bean的名称,如果是在方法中使用可以加在方法参数前面,Spring允许对方法的入参标注@Qualifiter已指定注入bean的名称。

  5)@Autowired注解也可以应用在数组类型的属性上,此时Spring将会把所有匹配的bean进行装配。

  6)@Autowired注解也可以应用在集合属性上,此时spring读取集合的类型信息,然后自动装配所有与之兼容的bean

  7)@Autowired注解在java.util.Map上时,若该Map的键值为String,那么Spring将自动装配与之Map值类型兼容的Bean,此时Bean的名称成为键值。

  8)如果@Autowired注解自动装配时有多个同类型的bean那么就会按照名称去找。

下面我们对@Autowired注解进行应用,在我们项目当中,一般都是Controller类中会注入Service,Service类会注入Respository,我们就用上一篇文章中的代码,对各个类按照这个顺序进行注入,并且调用注入bean的方法。

UserController类:注入UserService类

 1 @Controller
 2 public class UserController {
 3     private UserService userService;
 4     @Autowired
 5     public void setUserService(@Qualifier("userService") UserService userService) {
 6         this.userService = userService;
 7     }
 8
 9     public void execute() {
10         System.out.println("UserController execute....");
11         userService.add();
12     }
13 }

UserService类:注入UserRepositoryImpl类

1 @Service
2 public class UserService {
3     @Autowired
4     private UserRepository userRepository;
5     public void add() {
6         System.out.println("UserService add...");
7         userRepository.save();
8     }
9 }

UserRepositoryImpl类

@Repository(value = "userRepository")
public class UserRepositoryImpl implements UserRepository {public void save() {System.out.println("UserRepository Save。。。。");}
}

运行测试类:

 1 public class Main {
 2     public static void main(String[] args) {
 3         ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-annotation.xml");
 4         UserController userController = (UserController) ctx.getBean("userController");
 5         System.out.println(userController);
 6
 7         UserService userService = (UserService) ctx.getBean("userService");
 8         System.out.println(userService);
 9
10         UserRepository userRepository = (UserRepository) ctx.getBean("userRepository");
11         System.out.println(userRepository);
12
13         TestObject testObject = (TestObject) ctx.getBean("testObject");
14         System.out.println(testObject);
15     }
16 }

输出结果:我们可以发现可以成功的输出四个对象,证明我们的注入式成功的。

3.使用@Resource或@Inject自动装配Bean

Spring还支持@Resource和@Inject注解,这两个注解和@Autowired注解的功能类似

@Resource:注解要求提供一个Bean名称的属性,若该属性为空,则自动采用标注处的变量或方法名作为Bean的名称,并且它并不是Spring提供的注解而是import javax.annotation.Resource中的注解。

@Inject和:@Autowired注解一样是按类型匹配注入的Bean,但是没有required属性。

最后建议使用@Autowired注解。

转载于:https://www.cnblogs.com/fengyun2019/p/10844564.html

Spring基础18——通过注解配置bean之间的关联关系相关推荐

  1. Spring(二)--FactoryBean、bean的后置处理器、数据库连接池、引用外部文件、使用注解配置bean等...

    实验1:配置通过静态工厂方法创建的bean  [通过静态方法提供实例对象,工厂类本身不需要实例化!] 1.创建静态工厂类 public class StaticFactory {private sta ...

  2. 20.Spring 通过注解配置Bean

    一.在classpath中扫描组件 1.组件扫描:Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 2.特定组件包括: @Component:基本注解,标识了一个受Sp ...

  3. SSM4==通过XML配置spring 事务,通过纯注解配置spring 事务

    mysql的事务管理,是指在有关系的表(比如有外键)之间实现ACID,比如表A的金额列的外键是表B的金额列,那么如果A的金额减了300,B的金额也要减少300.如果A减300成功了,B失败了,mysq ...

  4. Spring概念、类注解和Bean作用域

    1.Spring 是什么? 我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃而庞⼤的社区,这就是它之所以能长久不衰的原因.Spr ...

  5. Spring注入方式及注解配置

    一:基于xml的DI(Dependency Injection) 注入类型: 定义学生Student实体类和小汽车Car实体类:进行封装和生成ToString(),并自定义属性Car Student ...

  6. 4. Spring 如何通过 XML 文件配置Bean,以及如何获取Bean

    在 Spring 容器内拼凑 bean 叫做装配.装配 bean 的时候,你是在告诉容器,需要哪些 bean ,以及容器如何使用依赖注入将它们配合在一起. 理论上,bean 装配的信息可以从任何资源获 ...

  7. Spring的理解以及注解配置Spring

    Spring概念:是一个轻量级控制反转(IOC)和,面向切面(AOP)的容器.装什么像什么,什么都可以装,管理者是对象.运用于一 式的开发,不排斥任何框架. SpringAOP:.将通知织入到被代理对 ...

  8. Spring 在xml文件中配置Bean

    Spring容器是一个大工厂,负责创建.管理所有的Bean. Spring容器支持2种格式的配置文件:xml文件.properties文件,最常用的是xml文件. Bean在xml文件中的配置 < ...

  9. spring + hibernate + 实体类 注解配置代码

    <?xml version="1.0" encoding="UTF-8"?> <beansxmlns="http://www.spr ...

最新文章

  1. poj3259(Bellman_ford算法)
  2. python内置函数可以返回列表元组_Python内置函数()可以返回列表、元组、字典、集合、字符串以及range对象中元素个数....
  3. c语言1至1000能被7或11 个数208 数下来没有208个,数学高手看过来:10000以内不能被3,5,7,9,11中任何一? 爱问知识人...
  4. Springsecurity-oauth2之/oauth/token的处理
  5. [转载]Hot Door CADtools (实战篇)
  6. c语言程序设计实验二模板,C语言程序设计实验二.doc
  7. 大数据之-Hadoop之HDFS_HDFS_基于JAVA的开发_客户端环境准备---大数据之hadoop工作笔记0054
  8. Mysql 浮点型入门
  9. 如何判断一个进程已经完成初始化?
  10. Android Studio 编译输出中文乱码的解决办法
  11. Linux内核源码分析
  12. 最受欢迎的网管工具集
  13. 《软件评测师教程》学习笔记-第一章:软件测试概述
  14. 算法题04:分治法:求第K小元素(线性时间选择算法)
  15. Cknife(中国菜刀) and AntSword(中国蚁剑)使用
  16. PyCharm入门教程——多个插入符号
  17. 美通社企业新闻汇总 | 2019.1.17 | 骊住在上海成立亚洲研发中心,霍尼韦尔深入参与中国最大石化项目建设...
  18. Debian上安装 Proxmox VE 7
  19. Replace Autoprefixer browsers option to Browserslist config,VUECLI3报错
  20. excel两行数据匹配【vlookup、countif】

热门文章

  1. axios Post无法传递数据的解决方案
  2. 解决WordPress设置错误的url网站不能访问的问题
  3. 完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三 1-转
  4. java 送参数_关于java:如何以编程方式发送带参数的HTTP请求?
  5. Java 通过Executors创建线程池的种类
  6. [Java] 蓝桥杯 BEGIN-1 入门训练 A+B问题
  7. 蓝桥杯 ALGO-53 算法训练 最小乘积(基本型)
  8. 1006. 换个格式输出整数 (15)-PAT乙级真题
  9. 逸管家中小企业未来的发展不可忽视人才战略
  10. windows下批量杀死进程