Spring框架 IOC控制反转

末蓝、 2022-01-21 07:01 454阅读 0赞

对象之间的依赖由容器建立,避免对象之间依赖由对象自身建立。可以用减少代码之间的耦合度。其中最常见的方式叫做依赖注入。
当A类中用到了B类的对象b,在没有IOC时需要在A的代码中new一个B的对象。
采用依赖注入技术之后,A的代码只需要定义一个私有的B对象,不需要直接new来获得这个对象,而是通过相关的容器控制程序来将B对象在外部new出来并注入到A类里的引用中

依赖注入:

  1. 基本元素注入
  2. 列表元素注入
  3. 对象依赖注入

基本元素注入:

  1. @Value("值")

property:name=“属性名” value=“值”

  1. <bean id="student" class="entity.Student">
  2. <property name="age" value="21"/>
  3. </bean>

列表元素注入:

  • list




    mysql
    j2ee


  • set




    mysql
    j2ee


  • map








对象依赖注入:

  1. set方法注入 注解:set方法上

xml配置

  1. property元素表示用set注入方式,spring调用B类的setA()方法注入
  2. <bean id="b" class="entity.B">
  3. <property name="a" ref = "a1">
  4. </bean>

注解方式:

  1. @Resource(name="a1")
  2. public void setA( A a) {
  3. this.a = a;
  4. }
  1. 构造器方法注入 注解:构造器方法上

xml配置

  1. index为第几个参数(下标从0开始)ref指定注入对象的setA()方法注入
  2. <bean id="b" class="entity.B">
  3. <constructor-arg index="0" ref="a1">
  4. </bean>

注解方式:
构造器上

  1. 自动注入 @Autowired

byName xml配置
Spring会根据B中的属性成员的名字自动调用set方法注入容器中Id等于属性名的对象(找不到注入null,不可能找到多个)

  1. <bean id="b" class="entity.B"
  2. autowire="byName"
  3. </bean>

byType xml配置
Spring会根据B中的属性成员的类型自动调用set方法注入容器中类型相等的对象(找不到注入null,找到多个报错)

  1. <bean id="b" class="entity.B"
  2. autowire="byType"
  3. </bean>

byType 注解注入
@Autowired为Spring提供的注解,只按照byType注入。
可以放在属性上 或者set方法上

  1. @Autowired
  1. 属性反射注入 属性上 @Resource(name=“id”)
    下面两种@Resource只要使用一种即可

    public class ServiceImpl {

    1. @Resource(name="userDao")
    2. private UserDao userDao;
    3. @Resource(name="userDao")
    4. public void setUserDao(UserDao userDao) {
    5. this.userDao = userDao;
    6. }

    }

IOC部分知识图
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,454人围观)

还没有评论,来说两句吧...

相关阅读

    相关 spring控制IOC

    IOC即为Inversion of Control,中文名称为控制反转。它是一种设计模式,用于降低代码耦合度,提高代码可维护性和可扩展性。 在面向对象编程中,对象之间的依赖关

    相关 spring Ioc(控制)

    简述: spring的核心有两部分:ioc和aop (1)ioc:控制反转,之前调用一个类中的不是静态的方法,创建类的对象 new 类,再调用。现在使用spring的ioc

    相关 Spring框架 IOC控制

    对象之间的依赖由容器建立,避免对象之间依赖由对象自身建立。可以用减少代码之间的耦合度。其中最常见的方式叫做依赖注入。 当A类中用到了B类的对象b,在没有IOC时需要在A的代