Spring属性依赖注入(手动装配)
程序员文章站
2022-05-23 21:46:48
...
Spring属性依赖注入
Spring的属性依赖注入分为两种: 手动装配 和 自动装配。
自动装配是指Spring整合Struts后,可以实现按类型/名称/构造等自动装配。
手动装配主要有两种:
(1)基于xml装配:构造方法,setter方法
(2)基于注解的装配。
今天就来学习一下手动装配的两种方式吧!
一、构造方法
在Spring的配置中,构造方法的注入形式为:<constructor-arg>
一般使用的方法是<constructor-arg index="?"type="?" value="?"></constructor-arg>
下面编写User类,里面有id,name,age三个属性,编写他们的构造方法,注意,并不一定要全部参数都必须在构造方法的参数列表中!也可以只写两个,但是index和type对应就好; 然后编写xml;最后编写Test类。
/**
*
*/
package com.Lily.SpringLearning.e_Constructor;
/**
* *
* @author LilyLee
* @date 2017年6月16日
* @time 上午8:47:01
* @Version 1.0
* @email [email protected]
*
*/
public class User {
private Integer id;
private String name;
private Integer age;
public User(Integer id, String name, Integer age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
@Override
//用toString方法来打印User的信息
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userId" class="com.Lily.SpringLearning.e_Constructor.User" >
<constructor-arg index="0" type="java.lang.Integer" value="1"></constructor-arg>
<constructor-arg index="1" type="java.lang.String" value="Lily"></constructor-arg>
<constructor-arg index="2" type="java.lang.Integer" value="18"></constructor-arg>
</bean>
</beans>
/**
*
*/
package com.Lily.SpringLearning.e_Constructor;
import static org.junit.Assert.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* *
* @author LilyLee
* @date 2017年6月16日
* @time 上午8:50:51
* @Version 1.0
* @email [email protected]
*
*/
public class Test {
@org.junit.Test
public void test() {
String xmlPath = "com/Lily/SpringLearning/e_Constructor/beans.xml";
ApplicationContext a=new ClassPathXmlApplicationContext(xmlPath);
User u=(User)a.getBean("userId");
System.out.println(u);
}
}
二、setter方法
在Spring配置中,使用setter方法注入的形式主要有两种:
(1)普通数据的注入: <property name="" value="值">
(2)引用数据的注入: <property name="" ref="另一个bean">
下面编写Person类,其中地址addr是引用数据,因此需编写Addr类,然后编写配置bean和测试类。
【注意,要把引用写到第一个bean内部,当做属性来写,否则会因为找不到引用而报错,或者字段打印是空】
/**
*
*/
package com.Lily.SpringLearning.e_setter;
/**
* *
* @author LilyLee
* @date 2017年6月16日
* @time 上午10:21:42
* @Version 1.0
* @email [email protected]
*
*/
public class Person {
private String name;
private Integer age;
private Address homeAddr;
private Address schoolAddr;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Address getHomeAddr() {
return homeAddr;
}
public void setHomeAddr(Address homeAddr) {
this.homeAddr = homeAddr;
}
public Address getSchoolAddr() {
return schoolAddr;
}
public void setSchoolAddr(Address schoolAddr) {
this.schoolAddr = schoolAddr;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", homeAddr="
+ homeAddr + ", schoolAddr=" + schoolAddr + "]";
}
}
/**
*
*/
package com.Lily.SpringLearning.e_setter;
/**
* *
* @author LilyLee
* @date 2017年6月16日
* @time 上午10:21:55
* @Version 1.0
* @email [email protected]
*
*/
public class Address {
private String addr;
private String mail;
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
@Override
public String toString() {
return "Address [addr=" + addr + ", mail=" + mail + "]";
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="person" class="com.Lily.SpringLearning.e_setter.Person">
<property name="name" value="Lily"></property>
<property name="age" value="18"></property>
<property name="homeAddr" ref="homeAddr"></property>
<property name="schoolAddr" ref="schoolAddr"></property>
</bean>
<bean id="homeAddr" class="com.Lily.SpringLearning.e_setter.Address">
<property name="addr" value="西安"></property>
<property name="mail" value="710071"></property>
</bean>
<bean id="schoolAddr" class="com.Lily.SpringLearning.e_setter.Address">
<property name="addr" value="南二环"></property>
<property name="mail" value="710070"></property>
</bean>
</beans>
/**
*
*/
package com.Lily.SpringLearning.e_setter;
import static org.junit.Assert.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* *
* @author LilyLee
* @date 2017年6月16日
* @time 上午10:30:08
* @Version 1.0
* @email [email protected]
*
*/
public class Test {
@org.junit.Test
public void test() {
String xmlPath = "com/Lily/SpringLearning/e_setter/beans.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
Person person = (Person) applicationContext.getBean("person");
System.out.println(person);
}
}
上一篇: 利用深度优先搜索和广度优先搜索来计算面积
下一篇: Tensorflow 基本用法(二)