接着我们讲讲关联关系的配置,我们耳熟能详的MVC结构,Controller关联着Service,Service关联着UserRepository,接着上一节的代码,完成上诉功能

在Main方法里,我们希望调用Controller的execute()方法能打印出三条信息,接下来我们直接运行一下

UserController userController = (UserController) ctx.getBean("userController");
userController.execute();

不出所料,空指针异常,因为UserService对象我们还没配置

接下来通过注解方式配置Bean的关联关系,实际上<context:component-scan>会自动注册一个AutowiredAnnotationBeanPostProcessor实例,该实例可以自动装配具有@Autowired、@Resource、@Inject注解的属性

@Autowired

方式很简单,在相关属性头顶上这个注解就行

我们也可以选择写一个setterXXX方法,把这个注解放这个方法上

如果我们引用的属性IOC容器中没有,会怎样?我们将TestObeject.java里的@Component注解取消掉,然后在Repository.java里引用它,优秀的IDEA已经报错了:

如果我们在@Autowired里加一些说明@Autowired(required=false)这样,没有也没关系,会打印出null

如果在IOC容器里有好几个类型对应的Bean会怎样?

我们在repository包里再写一个UserRepository的实现类UserJDBCRepository.java

  1. package com.figsprite.spring.beans_annotation.repository;  
  2.     
  3. import org.springframework.stereotype.Repository;  
  4.     
  5. @Repository  
  6. public class UserJDBCRepository implements UserRepository {  
  7.     @Override  
  8.     public void save() {  
  9.         System.out.println("JDBC  SAVE");  
  10.     }  
  11. }  

惊讶的运行正常= =,如果有两个相应的组件,那么将会去对应Bean的名字,注意,是通过属性名来对应的,即Controller.java中UserService字段的名字,接下来我们把这个名字拿掉,报错了,

对于重名我们有两种解决方法,第一种就是上述提到的,装配时写名字,另外一种就是指定装配哪一个,

Spring通过注释配置Bean2 关联关系的更多相关文章

  1. Spring事务的配置、参数详情及其原理介绍(Transactional)

    Spring 事务管理分为编程式和声明式的两种方式.编程式事务指的是通过编码方式实现事务:声明式事务基于 AOP,将具体业务逻辑与事务处理解耦.声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中 ...

  2. Spring MVC 事务配置

    Spring MVC事务配置 要了解事务配置的所有方法,请看一下<Spring事务配置的5种方法> 本文介绍两种配置方法: 一.      XML,使用tx标签配置拦截器实现事务 一.   ...

  3. spring的基本配置

    一:web.xml (1)spring mvc的配置 <servlet> <description>spring mvc servlet</description> ...

  4. Maven 工程下 Spring MVC 站点配置 (三) C3P0连接池与@Autowired的应用

    Maven 工程下 Spring MVC 站点配置 (一) Maven 工程下 Spring MVC 站点配置 (二) Mybatis数据操作 前两篇文章主要是对站点和数据库操作配置进行了演示,如果单 ...

  5. Spring IOC的配置使用(转)

    转:http://www.cnblogs.com/linjiqin/p/3408306.html Spring IOC的配置使用 1.1.1 XML配置的结构一般配置文件结构如下: <beans ...

  6. Spring的DataSource配置、将Hibernate配置全部写到Spring配置

    DataSource可以集中管理数据库连接,减少维护工作量,使部署更简单: Spring的DataSource配置:(Spring数据源配置)这里使用dbcp,还有很多其他的如c3p0,jdbc,jn ...

  7. 转:spring boot log4j2配置(使用log4j2.yml文件)---YAML 语言教程

    转:spring boot log4j2配置(使用log4j2.yml文件) - CSDN博客http://blog.csdn.net/ClementAD/article/details/514988 ...

  8. spring boot所有配置

    转载 http://blog.csdn.net/lpfsuperman/article/details/78287265 # 日志配置# 日志配置文件的位置. 例如对于Logback的`classpa ...

  9. Spring Boot 日志配置

    Spring Boot 日志配置 默认日志 Logback: 默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台.在运行应用程序和其他例子时,你应该已经看到很 ...

随机推荐

  1. LindDotNetCore~职责链模式的应用

    回到目录 职责链模式 它是一种设计模块,主要将操作流程与具体操作解耦,让每个操作都可以设置自己的操作流程,这对于工作流应用是一个不错的选择! 下面是官方标准的定义:责任链模式是一种设计模式.在责任链模 ...

  2. Java设计模式系列-工厂方法模式

    原创文章,转载请标注出处:<Java设计模式系列-工厂方法模式> 一.概述 工厂,就是生产产品的地方. 在Java设计模式中使用工厂的概念,那就是生成对象的地方了. 本来直接就能创建的对象 ...

  3. maven的项目目录解析

    target文件夹用于存放项目编译后产生的class文件.

  4. .net 笔试面试总结(1)

    趁着在放假时候,给大家总结一点笔试面试上的东西,也刚好为年后跳槽做一点小积累. 下面的参考解答只是帮助大家理解,不用背,面试题.笔试题千变万化,不要梦想着把题覆盖了,下面的题是供大家查漏补缺用的,真正 ...

  5. 微信小程序 canvas 绘制圆形状

    page({ // 绘制canvas drawCanvas:function(){ const ctx = wx.createCanvasContext('poster') // 画圆形二维码 thi ...

  6. 处理范例代码Webapi中的Mongodb的Bson中ObjectId反序列化异常

    微软代码范例中的一个Bug 处理Mongodb的Bson中ObjectId反序列化异常 https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/f ...

  7. java 线程池 ---- newFixedThreadPool()

    class MyThread implements Runnable{ private int index; public MyThread(int index){ this.index = inde ...

  8. pyltp安装踩坑记录

    LTP(Language Technology Platform)由哈工大社会计算与信息检索研究中心开发,提供包括中文分词.词性标注.命名实体识别.依存句法分析.语义角色标注等丰富. 高效.精准的自然 ...

  9. PM过程能力成熟度3级

    2级PM已经可以把项目管理起来了.如果这时候,企业只有一个PM,那这种程度的管理,只要逐渐深化,就可以一直维持下去. 然鹅,现实总是复杂很多... 公司会在PM建立2级的过程管理后,提高所有项目的可视 ...

  10. Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式

    Python第十四天 序列化  pickle模块  cPickle模块  JSON模块  API的两种格式 目录 Pycharm使用技巧(转载) Python第一天  安装  shell  文件 Py ...