使用spring注入枚举类型作为参数

目录
  • spring注入枚举类型作为参数
  • Spring参数注入
    • 1、通过构造方法实现参数注入
    • 2、通过set方法注入
    • 3、P命名空间注入

spring注入枚举类型作为参数

//定义枚举类型
public enum ReportType {
    MONTH,WEEK,DAY
}

//使用枚举类型
public class ReportJob {
    private ReportType reportType;
}
//spring配置文件注入
<bean id="DAY" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
     <property name="staticField" value="com.test.ReportType.DAY" />
 </bean>
<bean id="dayReportJob" class="com.test.ReportJob">
  <property name="reportType" ref="DAY" />
 </bean>

注意:

枚举类型要想注入到类中,一定要先使用org.springframework.beans.factory.config.FieldRetrievingFactoryBean类将枚举类型进行转换,即

<bean id="DAY" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
     <property name="staticField" value="com.test.ReportType.DAY" />
 </bean>

将ReportType.Day转换为DAY这个bean,然后在要注入的bean中使用<property name="reportType" ref="DAY" />引用即可。

Spring参数注入

1、通过构造方法实现参数注入

通过构造方法实现参数注入,依赖于构造方法,即实体类中一定存在对于的构造方法。

新建实体类如下所示:

package com.spring.entity;
public class Student {
    private String name;
    private  String password;
    private  Integer age;
//构造方法一
    public Student(String name, String password) {
        this.name = name;
        this.password = password;
    }
//构造方法二
    public Student(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
    public Student() {
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                '}';
    }
}

方法一

配置文件:在配置文件中使用constructor-arg标签进行参数注入的配置,其中标签中的name属性指向的是构造方法中传入的参数名,spring会根据参数名的对应匹配来进行对应的参数注入,下面代码段,spring将执行第二个构造方法为参数赋值。

  <bean id="Stu" class="com.spring.entity.Student">
      <constructor-arg name="name" value="小段"></constructor-arg>
       <constructor-arg name="age" value="123"></constructor-arg>
   </bean>

方法二

通过index属性来指定参数,并为其赋值。type类型唯一指定参数的类型。有了类型的唯一确定,就可以避免因为两个构造方法的参数同名而造成的混淆。若参数是基本类型,type属性直接填写为int。如:type=“int”。若参数类型为包装类,则type需要写全包装类所在的包名,类名。下面的参数注入会执行第一个构造方法为参数赋值。

<constructor-arg index="0" value="小段" type="java.lang.String"></constructor-arg>
 <constructor-arg index="1" value="123456" type="java.lang.String"></constructor-arg>

2、通过set方法注入

通过set方法实现参数注入,依赖于实体类中属性的set方法。

实体类构建如下:

package com.spring.entity;
public class Student {
    private String name;
    private  String password;
    private  Integer age;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Student() {
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                '}';
    }
}

配置文件:通过set方法实现参数注入,使用property标签来实现。如下所示:name对应实体类中的属性名称,value填写你想赋的值。也可以写标签引用bean。

<bean id="Stu" class="com.spring.entity.Student">
       <property name="name" value="小段"></property>
       <property name="password" value="123456"></property>
       <property name="age" value="12"></property>
   </bean>

3、P命名空间注入

在配置文件中(标签)新增一个命名空间:

 xmlns:http=http://www.springframework.org/schema/p

然后在标签中直接进行配置:

<bean id="Stu" class="com.spring.entity.Student" http:password="1234566" http:age="123" http:name="小段">

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Spring MVC处理参数中的枚举类型通用实现方法

    前言 在开发的过程中,会涉及到大量的枚举类型数据,我们都知道,Springmvc本身能自动转换很多的数据类型,也支持你自定义转换类型,非常灵活. 本文主要介绍的是关于Spring MVC处理参数的枚举类型通用实现的相关内容,下面话不多说了,来一起看看详细的介绍吧 业务场景: 前端提交了枚举的一个属性value,想由spring来完成参数类型自动转换成对应的枚举. 比方有一个枚举 @AllArgsConstructor(access = AccessLevel.PRIVATE) @Getter @

  • 详解Spring MVC自动为对象注入枚举类型

    如果一个对象里面有枚举类型的话,则spring MVC是不能够直接进行注入的,因为它只实现了一些基本的数据类型的自动转换注入,但是其也提供了可扩展的接口,可以根据自己的需要来进行扩展.下面是一个示例: 首先:这是一个枚举类: /** * 新闻类别 * @author: ShangJianguo * 2014-6-11 上午10:51:07 */ public enum ENews { company("0"), // 企业新闻 industry("1");// 行业

  • Spring:如何使用枚举参数

    目录 枚举参数 确认需求 定义枚举 Converter 和 ConverterFactory 加载配置 测试 总结 枚举参数 接口开发过程中不免有表示类型的参数,比如 0 表示未知,1 表示男,2 表示女.通常有两种做法,一种是用数字表示,另一种是使用枚举实现. 使用数字表示就是通过契约形式,约定每个数字表示的含义,接口接收到参数,就按照约定对类型进行判断,接口维护成本比较大. 在 Spring 体系中,使用枚举表示,是借助 Spring 的 Converter 机制,可以将数字或字符串对应到枚

  • springboot枚举类型传递的步骤

    目录 测试 Converter 灵活化 在本周写项目时,需要将枚举类型作为参数进行传递. 测试 首先先建立一个枚举类: public enum ScoreType { TOTAL_SCORE("总评成绩"), MIDDLE_SCORE("期中成绩"), FINAL_SCORE("期末成绩"); String des; // 描述 ScoreType(String des) { this.des = des; } public String get

  • 使用spring注入枚举类型作为参数

    目录 spring注入枚举类型作为参数 Spring参数注入 1.通过构造方法实现参数注入 2.通过set方法注入 3.P命名空间注入 spring注入枚举类型作为参数 //定义枚举类型 public enum ReportType { MONTH,WEEK,DAY } //使用枚举类型 public class ReportJob { private ReportType reportType; } //spring配置文件注入 <bean id="DAY" class=&qu

  • Spring注入Date类型的三种方法总结

    Spring注入Date类型的三种方法总结 测试Bean: public class DateBean { private Date birthday; public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } } 方式1:利用SimpleDateFormat的构造方法注入 <?xml version="1.0&quo

  • SpringBoot 枚举类型的自动转换的实现

    目录 1.请求头接收参数 2.请求体接收 3.添加自定义枚举序列化 需求:一般我们在数据库都会定义数值型的枚举常量,不管是序列化还是反序列化都是需要我们手动去转换成枚举类型的,既然这样我们能不能让它们自动转换呢?接下来我们就来尝试一下: 首先解决如何接收枚举类型. 枚举父类 /** * @author rookie */ public interface IEnum<T extends Serializable> { /** * 获取值 * @return 值 */ T getValue();

  • 详解Spring注入集合(数组、List、Map、Set)类型属性

    注入集合(数组.List.Map.Set)类型属性 (1)创建类,定义数组,list,map,set类型属性,并且生成对应的set方法. (2)在spring配置文件中进行配置. Stu类: package com.Keafmd.spring5.collectiontype; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; /** * Keafmd * * @C

  • Spring如何正确注入集合类型

    目录 1 注入方式 1.1 收集方式 1.2 直接装配方式 2 源码解析 2.1 收集装配 1 获取集合类型的elementType 2 根据元素类型找出所有Bean 3 将匹配的所有的Bean按目标类型转化 2.2 直接装配方式 3 修正 集合类型的自动注入是Spring提供的另外一个强大功能.我们在方便的使用依赖注入的特性时,必须要思考对象从哪里注入.怎么创建.为什么是注入这一个对象的.虽然编写框架的目的是让开发人员无需关心太多底层细节,能专心业务逻辑的开发,但是作为开发人员不能真的无脑去使

  • Spring的@Value注入复杂类型(通过@value注入自定义类型)

    之前写了一篇关于Spring的@Value注入的文章<介绍两种SpringBoot读取yml文件中配置数组的方法>. 里面列出了@Value和@ConfigurationProperties的对比,其中有一条是写的@value不支持复杂类型封装(数组.Map.对象等). 但是后来有小伙伴留言说他用@value测试的时候,是可以注入的数组和集合的.于是我就跟着做了一些测试,发现确实可以.但是只有在以,分割的字符串的时候才可以. 为什么用,分割的字符串可以注入数组?于是我就去一步一步的断点去走了一

  • Spring依赖注入多种类型数据的示例代码

    目录 Student实体类 StudentsClass实体类 beans.xml 测试 Student实体类 package entity; import java.util.*; /** * @author LeDao * @company * @create 2022-02-13 21:26 */ public class Student { private int id; private String name; private StudentClass studentClass; pri

随机推荐