Spring配置——属性注入
Posted Dream
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring配置——属性注入相关的知识,希望对你有一定的参考价值。
1、set注入方式
(1)注入的为值类型(八大数据类型)的数据
配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "> <bean name="student" class="pers.zhb.domain.Student"> <property name="sname" value="zhai"></property> <property name="snum" value="20200210"></property> <property name="sex" value="nan"></property> </bean> </beans>
也可以以子标签的方式配置:
<property name=""> <value>123</value> </property>
测试类:
public class Test { public void test1(){ ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");//创建容器对象 Student student=(Student)applicationContext.getBean("student"); System.out.println(student); } public static void main(String[] args){ Test test=new Test(); test.test1(); } }
(2)注入的为引用数据类型的数据:
Student对象:
package pers.zhb.domain; public class Student { private String snum; private String sname; private String sex; private Course course; public Course getCourse() { return course; } public void setCourse(Course course) { this.course = course; } public Student(){ System.out.println("Student对象创建了!"); } public String getSnum() { return snum; } public void setSnum(String snum) { this.snum = snum; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "Student{" + "snum=\'" + snum + \'\\\'\' + ", sname=\'" + sname + \'\\\'\' + ", sex=\'" + sex + \'\\\'\' + ", course=" + course + \'}\'; } public void destory(){ System.out.println("我是销毁的方法!"); } public void init(){ System.out.println("我是初始化的方法!"); } }
Course对象:
public class Course { private String cname; public String getCname() { return cname; } public void setCname(String cname) { this.cname = cname; } @Override public String toString() { return "Course{" + "cname=\'" + cname + \'\\\'\' + \'}\'; } }
配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "> <bean name="student" class="pers.zhb.domain.Student"> <property name="sname" value="zhai"></property> <property name="snum" value="20200210"></property> <property name="sex" value="nan"></property> <property name="course" ref="course"></property> </bean> <bean name="course" class="pers.zhb.domain.Course"> <property name="cname" value="算法设计与分析"></property> </bean> </beans>
测试类:
public class Test { public void test1(){ ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");//创建容器对象 Student student=(Student)applicationContext.getBean("student"); System.out.println(student); } public static void main(String[] args){ Test test=new Test(); test.test1(); } }
2、构造函数注入
创建Student对象:
package pers.zhb.domain; public class Student { private String snum; private String sname; private String sex; private Course course; public Student(String snum, String sname, String sex, Course course) { this.snum = snum; this.sname = sname; this.sex = sex; this.course = course; } public Course getCourse() { return course; } public void setCourse(Course course) { this.course = course; } public Student(){ System.out.println("Student对象创建了!"); } public String getSnum() { return snum; } public void setSnum(String snum) { this.snum = snum; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "Student{" + "snum=\'" + snum + \'\\\'\' + ", sname=\'" + sname + \'\\\'\' + ", sex=\'" + sex + \'\\\'\' + ", course=" + course + \'}\'; } public void destory(){ System.out.println("我是销毁的方法!"); } public void init(){ System.out.println("我是初始化的方法!"); } }
需要在Student类中创建一个构造函数。
配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "> <bean name="student" class="pers.zhb.domain.Student"> <constructor-arg name="sname" value="zhai"></constructor-arg> <constructor-arg name="snum" value="123456"></constructor-arg> <constructor-arg name="sex" value="nan"></constructor-arg> <constructor-arg name="course" ref="course"></constructor-arg> </bean> <bean name="course" class="pers.zhb.domain.Course"> <property name="cname" value="算法设计与分析"></property> </bean> </beans>
配置文件中的配置需要和构造函数中属性的配置一一对应。
其他属性:
index:指定构造函数的参数的索引
type:指定构造函数参数的类型
3、p名称空间方式(对set方式注入进行简化)
(1)导入p名称空间(前提):
xmlns:p="http://www.springframework.org/schema/p"
(2)配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "> <bean name="student" class="pers.zhb.domain.Student" p:sname="zhai" p:sex="nan" p:snum="1234" p:course-ref="course"> </bean> <bean name="course" class="pers.zhb.domain.Course"> <property name="cname" value="电子技术"></property> </bean> </beans>
测试:
4、spel(Spring表达式语言)注入
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "> <bean name="student" class="pers.zhb.domain.Student"> <property name="sname" value="zhang"></property> <property name="snum" value="11111"></property> <property name="sex" value="nv"></property> </bean> <bean name="course" class="pers.zhb.domain.Course"> <property name="cname" value="电子技术"></property> </bean> <bean name="student1" class="pers.zhb.domain.Student"> <property name="sname" value="#{student.sname}"></property> <property name="snum" value="#{student.snum}"></property> <property name="sex" value="#{student.sex}"></property> <property name="course" ref="course"></property> </bean> </beans>
可以直接去取已经创建的对象的值。
5、复杂类型注入
(1)数组类型:
添加一个值:
<bean name="arr" class="pers.zhb.domain.CollectionBean">
<property name="arr" value="加油!!"></property>
</bean>
添加多个值:
<bean name="arr" class="pers.zhb.domain.CollectionBean">
<property name="arr">
<array>
<value>你好</value>
<value>加油</value>
<value>努力</value>
</array>
</property>
</bean>
值加对象:
<bean name="arr" class="pers.zhb.domain.CollectionBean">
<property name="arr">
<array>
<value>你好</value>
<value>加油</value>
<value>努力</value>
<ref bean="student"></ref>
</array>
</property>
</bean>
第四个值为一个Student对象。
(2)List类型:
<bean name="cb" class="pers.zhb.domain.CollectionBean">
<property name="li">
<list>
<value>你好</value>
<value>加油</value>
<value>努力</value>
<ref bean="student"></ref>
</list>
</property>
</bean>
(3)map类型:
<bean name="map" class="pers.zhb.domain.CollectionBean">
<property name="map">
<map>
<entry key="key" value="value"></entry>
<entry key="student" value-ref="student"></entry>
</map>
</property>
</bean>
(4)properties类型:
<bean name="prop" class="pers.zhb.domain.CollectionBean">
<property name="properties">
<props>
<prop key="key">key</prop>
</props>
</property>
</bean>
6、filed注入
使用@Autowired,@Resource等注解自动注入
以上是关于Spring配置——属性注入的主要内容,如果未能解决你的问题,请参考以下文章
spring4.X,如何在代码中使用注解来注入属性文件里配置的值
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段