• Spring通过注释配置Bean2 关联关系


        接着我们讲讲关联关系的配置,我们耳熟能详的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字段的名字,接下来我们把这个名字拿掉,报错了,

      

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

  • 相关阅读:
    VUE调用函数,以及event的讲解
    VUE双向绑定,以及表达式自增
    使用VUE的准备工作,以及显示文本
    MVC中VUE的学习
    Redis
    C# form表单提交enctype="multipart/form-data" 与 enctype="application/x-www-form-urlencoded" 两者之间的区别
    C# 导入导出
    文件压缩,解压缩
    [vue-router] Duplicate named routes definition: { name: "Front", path: "/home/front" }
    * @/components/widget/AddBands in ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./src/components/pages/Brands.vue
  • 原文地址:https://www.cnblogs.com/figsprite/p/10778110.html
Copyright © 2020-2023  润新知