精华内容
下载资源
问答
  • 在我们写代码的过程中,通常会用new来产生一个对象,但是这样操作的后果会使得代码难于管理。 而Spring框架为我们提供了一个控制...而依赖注入(DI,Dependency Injection)就是实现控制反转的其中一种方式。 一...

    在我们写代码的过程中,通常会用new来产生一个对象,但是这样操作的后果会使得代码难于管理。

    而Spring框架为我们提供了一个控制反转(IOC,Inversion of Control)的思想。意思是原来由程序员new出来的对象,现在不这样做了,而是把它“反转”。由Spring容器去产生管理这些对象。而依赖注入(DI,Dependency Injection)就是实现控制反转的其中一种方式。
    一.set注入:需生产set方法

    例1:比如主板类中(Mainboard)含有Cpu对象(Cpu)和Ram(Ram)对象:先生成此两个对象的set方法,分别注入:

    public interface Mainboard extends PCComponent{
       private Cpu cpu;
       private Ram ram;
        public void setCpu(Cpu cpu);
        public void setRam(Ram ram);
    }

    随后编写Spring的配置文件applicationContext.xml。<bean>中的name为类的一个别名,而class为类的完整名称。

    <bean id="mainboard" class="com.spring.service.pc.Ipml.InterBoard">
        <property name="cpu">
            <bean class="com.spring.service.pc.Ipml.InterCpu"></bean>
        </property>
        <property name="ram">
            <bean class="com.spring.service.pc.Ipml.KingstoneRam"></bean>
        </property>
    </bean>

     例2:创建一个pojo的car类:属性有汽车名字/价格/颜色

    public class car implements Serializable {
        private String name;
        private String  color;
        private double price;
    
        public car() {
        }
    
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getColor() {
            return color;
        }
    
        public void setColor(String color) {
            this.color = color;
        }
    
        public double getPrice() {
            return price;
        }
    
        public void setPrice(double price) {
            this.price = price;
        }
    }
    

    随后编写Spring的配置文件applicationContext.xml。<bean>中的name为类的一个别名,而class为类的完整名称。分别给汽车名字及汽车颜色与汽车价格进行赋值

     <bean id="car" class="com.spring.service.pojo.car" >
            <!--Set方式注入,-->
           <!-- <property name="name" value="B驰"></property>
            <property name="color" value="红色"></property>
            <property name="price" value="66"></property>-->
        </bean>
    

    二.构造器注入(需生产带参数的构造方法):

    构造器注入指的是在类中构造带参数的构造方法实现类的注入,它又可以分为以下几种方式注入:索引注入/数据类型注入

    使用方式:
    第一,在类中,不用为属性设置setter方法,但是需要生成该类带参的构造方法。
    第二,在配置文件中配置该类的bean,并配置构造器,在配置构造器中用到了<constructor-arg>节点,该节点有四个属性:
    · index是索引,指定注入的属性,从0开始;
    · type是指该属性所对应的类型;
    · ref 是指引用的依赖对象;
    · value 当注入的不是依赖对象,而是基本数据类型时,就用value;

    1.索引注入:

    public class car implements Serializable {
        private String name;
        private String  color;
        private double price;
        public car(String name, String color, double price) {
            this.name = name;
            this.color = color;
            this.price = price;
        }
    }
    

    在配置文件中,不再用<property>标签,而是用<constructor-arg>标签代替,其中索引序号不能乱:

     <constructor-arg index="0" value="B驰"></constructor-arg>
            <constructor-arg index="1" value="红色"></constructor-arg>
        <constructor-arg index="2" value="66"></constructor-arg>

    2.类型注入,其中类型顺序不能乱:

    <constructor-arg type="java.lang.String" value="奥迪" ></constructor-arg>
            <constructor-arg type="java.lang.Double" value="500000"></constructor-arg>
            <constructor-arg type="java.lang.String" value="黑色"></constructor-arg>

    注意:属性中含有List,Array,Map类型时:了解如下写法:

     <constructor-arg index="3" >
                <list>
                    <value>张三</value>
                    <value>李四</value>
                    <value>王五</value>
                </list>
                <map>
                    <entry key="id" value="1"></entry>
                </map>

     

    展开全文
  • 1.构造方法注入: 首先: 其次: 再serviceContent.xml里面注入依赖bean 2.get/set注入: 首先: 其次: 在serviceContent.xml里面注入依赖bean

    1.构造方法注入:
    首先:
    在这里插入图片描述
    其次:
    再serviceContent.xml里面注入依赖bean
    在这里插入图片描述

    2.get/set注入:
    首先:
    在这里插入图片描述
    其次:
    在serviceContent.xml里面注入依赖bean
    在这里插入图片描述

    展开全文
  • 1.@Autowired注入 1 2 3 4 5 6 7 8 9 10 11 @RestController @RequestMapping("/test") publicclassTestController { @Autowired private...

    1.@Autowired注入

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    @RestController

    @RequestMapping("/test")

    public class TestController {

        @Autowired

        private List<TestService> testServices;

        @Autowired

        private List<ChainAsbtract> chains;

      

        private ChainAsbtract target;

      

    }

     

    2.构造器注入

    Spring4.3+之后,constructor注入支持非显示注入方式。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    @RestController

    @RequestMapping("/test")

    public class TestController {

    //    @Autowired

        private final List<TestService> testServices;

    //    @Autowired

        private final List<ChainAsbtract> chains;

      

    //    @Autowired

        public TestController(List<TestService> testServices, List<ChainAsbtract> chains) {

            this.testServices = testServices;

            this.chains = chains;

        }

      

         

    }

      

     3.setter注入

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    @RestController

    @RequestMapping("/test")

    public class TestController {

    //    @Autowired

        private final List<TestService> testServices;

    //    @Autowired

        private final List<ChainAsbtract> chains;

      

        @Autowired

        public void setTestServices(List<TestService> testServices){

            this.testServices = testServices;

        }

      

        @Autowired

        public void setTestServices(List<ChainAsbtract> chains){

            this.chains = chains;

        }

         

    }

    展开全文
  • Spring Setter注入(Setter Injection) 与构造器注入(Constructor Injection)的区别 背景 用过Spring injection的都知道,通常有两种依赖注入方式。 Constructor Injection public class Service { public ...

    Spring Setter注入(Setter Injection) 与构造器注入(Constructor Injection)的区别


    背景

    用过Spring injection的都知道,通常有两种依赖注入方式。
    Constructor Injection

    public class Service {
    
      public Collaborator collaborator;
    
      // constructor with arguments, you *have* to
      // satisfy the argument to instantiate this class
      public Service(Collaborator collaborator) {
        this.collaborator = collaborator;
      }
    }
    

    配置时,

    <bean id="authenticator" class="com.mycompany.service.AuthenticatorImpl"/>
    
    <bean id="accountService" class="com.mycompany.service.AccountService">
      <constructor-arg ref="authenticator"/>
    </bean>
    

    还有setter injection.

    <bean id="authenticator" class="com.mycompany.service.AuthenticatorImpl"/>
    
    <bean id="accountService" class="com.mycompany.service.AccountService">
      <property name="authenticator" ref="authenticator"/>
    </bean>
    

    区别

    这两种方式都能实现目标,那有什么区别呢?
    在Spring早期时就有人写过对比。(https://spring.io/blog/2007/07/11/setter-injection-versus-constructor-injection-and-the-use-of-required/)
    首先构造器注入,可以保证强制用户必须设置对应的变量,否则object无法生成。但为什么很多人都用Setter Injection呢?原因有二:

    1. 历史原因
      2003年Spring诞生初期,主要都用Setter injection. 因为开发者认为没有缺省变量和变量名的构造将使开发者含糊不清。
    2. 框架本身
      Spring框架本身更加容易支持Setter Injection. 因为它以可配置性为主要目的。可以配置的框架通常都有很多可选的参数。
    展开全文
  • set方法注入 applicationContext.xml &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="...
  • Sprint set自动注入 构造器注入 注解

    千次阅读 2016-12-21 22:28:45
    1、set自动注入bean有个属性 autowire autowire”byType” 自己去找对应的注入。也就是把原来的 ...-- 利用set注入 --> <property name="c" ref="p1" ></property> <property name="p" ref="p2"></pro
  • 一、构造函数注入 在bean.xml中配置 在测试类中测试是否成功获得对象实例,并注入数据 运行结果图: 二、set方法注入 首先在类中必须有成员属性的set方法 接着在bean.xml中配置,使用的是property标签 测试类...
  • spring是一个轻量级的控制反转(IoC)面向切面(AOP)的容器框架 ——从大小与开销两方面而言Spring都是轻量的 ——通过控制反转(IOC)的技术达到松耦合的目的 ——提供了面向切面编程的丰富支持,允许通过分离应用...
  • Spring之旅(3)依赖注入        依赖注入是什么在...构造函数是具体的类 考虑下面一个例子: Spring-context.xml <bean id="home" cl
  • --spring中的依赖注入 依赖注入: Dependency Injection IOC的作用: 降低程序的耦合(依赖关系) 依赖关系的管理: 以后都要交给spring来维护,在当前类需要用到其他类的对象, 由spring为我们提供,我们只需要...
  • 创建Java项目,添加spring包,在src目录下新建spring-conf.xml文件(文件名称可自己定,也不用必须放到src下,程序编译后,保证文件在classpath下就行)。 若创建是maven项目,则需在pom.xml中添加spring依赖,如下...
  • spring的属性注入和构造器注入

    千次阅读 2017-11-19 22:19:12
    构造器注入 工厂方法注入 平常中用到的前两种方法较多,下面对前两种方法举例。 一、属性注入1、创建一个car类,作为注入的beanpackage com.lzj.spring; public class Car { private String brand; private float ...
  • Sping 可以各大优秀的框架很好结合(Struts2 springmvc mybatis hibernate) Spring 一站式开发(springmvc spring JdbcTemplate) 底层原理:反射,代理机制 搭建spring框架步骤 1.导入jar包 2.创建spring...
  • 构造器注入

    千次阅读 2018-12-01 16:39:59
    构造器注入:简单注入 --> < bean id= "emp" class= "construct.easyinjection.employee" > < constructor-arg name= "username" value= " 洲洲 " > constructor-arg > < constructor-arg name...
  • Spring的注入方式(构造器,set方法,集合注入) applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:p=...
  • spring构造器注入

    千次阅读 2015-06-28 14:57:14
    spring set注入请看: ...总结:构造器注入虽然很方便,但是在开发中有很多弊端,比如我不想注入某个字段,怎么办。所以,在用的时候看业务在去用具体方法。 博主表述不太好,见谅
  • 1.在设值注入方法支持大部分的依赖注入,如果我们仅需要注入int、stringlong型的变量,我们不要用设值的方法注入。对于基本类型,如果我们没有注入的话,可以为基本类型设置默认值。在构造方法注入不支持大部分的...
  • spring框架为我们提供了三种注入方式,分别是set注入构造方法注入,接口注入。接口注入不作要求,下面介绍前两种方式。 1,set注入  采用属性的set方法进行初始化,就成为set注入。  1)给普通字符类型...
  • Spring依赖注入环境配置无参构造注入有参构造方法注入结果展示set方法注入 环境配置 java8,idea,spring5的jar包 无参构造注入 1.首先编写一个无参构造的类。 public class User { public void add(){ System....
  • Spring设值注入和构造注入的比较

    千次阅读 2014-10-16 23:15:39
    在过去的开发过程中,这两种注入方式都是非常常用的。Spring也同时
  • Spring实战:构造器方式注入JavaBean

    千次阅读 2020-02-29 21:40:26
    1.导入Spring的Java包: 2.配置applicationContext.xml文件 注:可以下在spring tool插件使开发更轻松! 3.编写applicationContext.xml文件,并添加相应的标签。这个applicationContext.xml即为IOC容器 <?xml ...
  • 原文:https://cloud.tencent.com/developer/article/1126880【Spring】浅谈spring为什么推荐使用构造器注入 一、前言 ​ Spring框架对Java开发的重要性不言而喻,其核心特性就是IOC(Inversion of Control, ...
  • 注入的属性类型基本上分为三块,普通类型,引用类型集合 一、构造方法注入 这种方式的注入是指带有参数的构造函数注入 public class User4 { private String username; public User4(String username) { ...
  • Spring的setter注入和构造器注入

    千次阅读 2016-12-05 20:52:24
    Emp.javapackage com.lovo.bean; public class Emp { private String name; private Dept dept; public Emp() { super(); } public Emp(String name, Dept dept) { super(); this.name = name;
  • 推荐基于Lombok的Spring注入方式注入方式(基于构造器注入)及快速获取Spring容器中管理的对象 Spring注入方式对比 推荐一种好用的基于构造器注入的Spring注入方式 使用 Lombok 解决构造器注入代码冗余问题 快速获取...
  • Java面试题大全(2020版)

    万次阅读 多人点赞 2019-11-26 11:59:06
    发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,...JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境运行环境。 JRE:Java Runtime Environ...
  • 例子2.1新建一个空的spring项目2.2类文件创建2.3java文件2.4xml文件2.5运行结果3.总结 1.Bean的初始化方式: 1.无参构造(默认构造方法); 2.有参构造(自定义构造方法); 3.set方法 2.例子 2.1新建一个空的spring...
  •  下面用这些类来演示setter方式注入构造函数注入来解决Manager层注入Dao问题。一,setter方式注入 首先要在Manager实现类中定义Dao的私有成员变量,并为此变量添加set方法,注入的时候会自动调用这个set方法对...
  • Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:构造方法注入,setter注入和接口注入。 本章重点讲解基本的两种方式构造器和setter,注解后面会单独一章讲解 案例准备 创建...
  • Spring-依赖注入构造器方式注入

    千次阅读 2016-09-27 18:37:06
    构造器注入-带有参数的构造函数注入 项目结构如下: 1、新建第一个bean文件 PersonServiceBean.java: /* *@Author swxctx *@time 2016年9月27日 */ package com.sw.servicebean; public class ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,623
精华内容 23,449
关键字:

java的set注入和构造器注入

java 订阅