首先创建一个实体类User

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {private String username;private Integer age;private Date birth;
}

以User类为例,展示对实体类中基本数据类型属性进行初始化

<bean id="user" class="cn.kgc.spring.entity.User"><property name="username" value="jason"></property><property name="age" value="24"></property><property name="birth" value="2022-7-3"></property>
</bean>

这里有两个点需要注意:

1、初始化对象时,使用property标签,实际在初始化时,会调用类中对应属性的set方法;

2、日期类默认使用格式为:yyyy/MM/dd,如果要使用其他类型则需要自定义数据类型转换器:

public class MyDateConverter implements Converter<String, Date> {@Overridepublic Date convert(String source) {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");try {Date parse = simpleDateFormat.parse(source);return parse;} catch (ParseException e) {e.printStackTrace();}return null;}
}

然后在配置文件中托管自定义的数据类型转换器

<bean id="converter" class="cn.kgc.spring.entity.converter.MyDateConverter"></bean>

最后将自定义的数据类型转换器交由数据类型转换器工厂对象进行管理

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"><property name="converters"><set><ref bean="converter"></ref></set></property></bean>

再创建Aoo实体类演示String、List、Set、Map、Properties类型的初始化

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Aoo {private String[] str;private List<String> list;private Set<String> set;private Map<String,String> map;private Properties properties;
}

在配置文件中实现注入

<bean id="aoo" class="cn.kgc.spring.entity.Aoo"><property name="str"><array><value>jason</value><value>lee</value><value>lu</value></array></property><property name="list"><list><value>jason</value><value>lee</value><value>lu</value></list></property><property name="set"><set><value>jason</value><value>lee</value><value>lu</value></set></property><property name="map"><map><entry key="username" value="root"></entry><entry key="password" value="root"></entry></map></property><property name="properties"><props><prop key="driver">com.mysql.jdbc.Driver</prop><prop key="username">root</prop><prop key="password">123456</prop></props></property></bean>

创建实体类Student

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Student {private String stuName;private String stuNo;private Integer age;private Double score;
}

下面演示四种初始化方法

1、使用构造方法完成对象属性的初始化,初始化属性的个数要和类中的构造方法相匹配

<bean id="student" class="cn.kgc.spring.entity.Student"><constructor-arg name="stuName" value="jason"></constructor-arg><constructor-arg name="stuNo" value="20220001"></constructor-arg><constructor-arg name="score" value="80.4"></constructor-arg><constructor-arg name="age" value="23"></constructor-arg></bean>

2、使用type数据类型完成属性的初始化操作,如有相同的数据类型存在,需要配合index指定属性的索引,索引指代属性在类中的顺序

<bean id="student" class="cn.kgc.spring.entity.Student"><constructor-arg type="java.lang.String" index="1" value="20220001"></constructor-arg><constructor-arg type="java.lang.String" index="0" value="jason"></constructor-arg><constructor-arg type="java.lang.Double" value="78.5"></constructor-arg><constructor-arg type="java.lang.Integer" value="23"></constructor-arg></bean>

3.使用p命名空间完成对象的初始化

作用:简化使用property标签完成初始化的过程,但是依然要求类中要有对应的set方法

首先引入p命名空间

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

<bean id="student" class="cn.kgc.spring.entity.Student" p:stuName="jason" p:stuNo="20220001" p:age="20" p:score="89.9"></bean>

4、使用C命名空间完成对象的初始化,本质是使用有参构造完成初始化

先引入C命名空间

xmlns:c="http://www.springframework.org/schema/c"

<bean id="student" class="cn.kgc.spring.entity.Student" c:age="20" c:score="89.4" c:stuName="jason" c:stuNo="20220001"></bean>

建立实体类Teacher展示属性的自动注入

@Setter
@ToString
public class Teacher {private Student student;
}
属性类型是自定义类型时  不能在使用value  要使用ref  进行关联   ref的值是 关联bean的id
<bean id="teacher" class="cn.kgc.spring.entity.Teacher">
<property name="student" ref="student" ></property>
</bean>
autowire="byName" 根据实体类中属性名字进行自动注入,根据属性的名字,在spring容器查找哪个bean的id和属性名一致
<bean id="teacher" class="cn.kgc.spring.entity.Teacher" autowire="byName"></bean>

接下来再看Connection实例工厂对象:首先建立ConnectionFactoryBean类

public class ConnectionFactoryBean {public Connection getConnection() throws ClassNotFoundException, SQLException {Class.forName("com.mysql.jdbc.Driver");Connection connection = DriverManager.getConnection("jdbc:mysql:///java2215?serverTimezone=UTC", "root", "123456");return connection;}
}

在配置文件中写如下代码:

<bean id="connFactory" class="cn.kgc.spring.factory.ConnectionFactoryBean"></bean>
<bean id="connection" factory-method="getConnection" factory-bean="connFactory"></bean>

再创建 ConnectionInterfaceFactoryBean类


/*** 实现FactoryBean接口的工厂对象* 泛型 指代工厂对象返回值的类型*/public class ConnectionInterfaceFactoryBean implements FactoryBean<Connection> {@Overridepublic Connection getObject() throws Exception {Class.forName("com.mysql.jdbc.Driver");Connection connection = DriverManager.getConnection("jdbc:mysql:///java2215?serverTimezone=UTC", "root", "123456");return connection;}@Overridepublic Class<?> getObjectType() {return Connection.class;}//设置返回的实例化对象是否为单例的@Overridepublic boolean isSingleton() {//返回值是true,表示是单例的bean;返回值是false,表示不是单例的beanreturn false;}
}

在配置文件中书写如下代码:

<bean id="connection" class="cn.kgc.spring.factory.ConnectionInterfaceFactoryBean"></bean>

最后展示Connection静态工厂对象:创建ConnectionStaticFactoryBean类

public class ConnectionStaticFactoryBean {public static Connection getConnection() throws ClassNotFoundException, SQLException {Class.forName("com.mysql.jdbc.Driver");Connection connection = DriverManager.getConnection("jdbc:mysql:///java2215?serverTimezone=UTC", "root", "123456");return connection;}
}

在配置文件中书写如下代码:

<bean id="connection" class="cn.kgc.spring.factory.ConnectionStaticFactoryBean" factory-method="getConnection"></bean>

spring实现属性值的注入相关推荐

  1. spring项目属性注入和bean管理xml 注入一般属性和集合属性

    IOC 介绍: 在Spring的应用中,Spring IoC容器可以创建.装配和配置应用组件对象,这里的组件对象称为Bean. Bean的实例化 在面向对象编程中,想使用某个对象时,需要事先实例化该对 ...

  2. bean注入属性_摆脱困境:将属性值注入配置Bean

    bean注入属性 Spring Framework对将从属性文件中找到的属性值注入到bean或@Configuration类中提供了很好的支持. 但是,如果将单个属性值注入这些类中,则会遇到一些问题. ...

  3. 摆脱困境:将属性值注入配置Bean

    Spring Framework对将从属性文件中找到的属性值注入到bean或@Configuration类中提供了很好的支持. 但是,如果将单个属性值注入这些类中,则会遇到一些问题. 这篇博客文章指出 ...

  4. 【Spring】- 属性注入方式

    2019独角兽企业重金招聘Python工程师标准>>> House类:只有一个People属性,验证引用的ref引用bean的set方法注入方式 package com.zhiwei ...

  5. spring心得5--构造器注入@设置控制@案例加注解剖析

    1.设置引用空对象的情况 设置null: <property name="barlist"> <null/> </property> 这种设置多 ...

  6. 如何注入值到Spring bean属性

    在Spring中,有三种方式注入值到 bean 属性. 正常的方式 快捷方式 "p" 模式 看到一个简单的Java类,它包含两个属性 - name 和 type.稍后将使用Spri ...

  7. Spring 注入static属性值

    Spring 注入static属性值 本文介绍Spring中如何从属性文件给static字段注入值.实际应用中一些工具类中static属性值需读取配置文件,实现该功能可以让工具类提供静态方法更易使用. ...

  8. @value 注入静态属性_SpringBoot使用@Value读取属性值

    今天给大家讲一下如何在SpringBoot项目中使用@Value注解读取配置文件的属性值. 1给普通变量赋值1. 给普通变量赋值时,直接在变量声明之上添加@Value()注解即可 @Component ...

  9. Spring Boot系列四 Spring @Value 属性注入使用总结一

    @Value注入 不通过配置文件的注入属性的情况 通过@Value将外部的值动态注入到Bean中,使用的情况有: 注入普通字符串 注入操作系统属性 注入表达式结果 注入其他Bean属性:注入beanI ...

最新文章

  1. CentOS安装tomcat
  2. VC++ 多文档模板(添加新文档模板)编程实例
  3. 计算机考研我该如何准备,计算机考研该如何准备呢-考研初试
  4. 蔚来汽车5月份交付6711辆电动汽车 同比增长95.3%
  5. 致软件测试员——面试,你准备好了么?
  6. java操作sql数据库_Java连接Sql数据库经常用到的操作
  7. asp.net+mysql,asp.net+mysql后台盲注入
  8. 计算机科学导论课后感,计算机科学导论课后总结_5
  9. Multisim14 - 运行10版本文件时数码管一直显示为0的问题
  10. MTK LED驱动异常检测步骤
  11. 笔记本电脑耳机左右声道音量不一样,如何解决?
  12. 计算机常用的IP地址三类,常用的三类IP地址
  13. 千兆以太网交叉线_什么是交叉以太网电缆? 比较交叉与跳线
  14. kali linux安装firefox,Kali安装firefox浏览器
  15. 奇安信渗透测试面试题库_奇安信面试经验
  16. CF869C:C. The Intriguing Obsession(组合数)
  17. LSM树的基本原理-学习笔记
  18. Linux哪个命令显示文件内容,显示文件内容的Linux命令有哪些?Linux培训
  19. 耐得住时间的考验,才能一步步逼近完美
  20. WiFi 基础(一)—— 名词介绍

热门文章

  1. 线性回归之梯度下降法原理介绍
  2. 电脑游戏业编年史之七──新老之争
  3. Linux系统CentOS6.5版本下载链接
  4. html button去掉点击时的边框
  5. 原理 数据溯源_什么是数据溯源?
  6. Ubuntu 18.04 网卡配置
  7. c语言中无符号和有符号之间的运算
  8. Bankless:Maker DAO的生存危机
  9. Java快排算法详解
  10. C#【系统信息篇】获得本地计算机名称和登录用户名