Spring支持构造方法注入和setter方法注入:
构造器注入:
car.java
package cn.spring.demo5;
public class Car {
private String name;
private Double prices;
public Car() {
super();
}
public Car(String name, Double prices) {
super();
this.name = name;
this.prices = prices;
}
@Override
public String toString() {
return "Car [name=" + name + ", prices=" + prices + "]";
}
}
有两种方式(两者是一样的结果):
<bean id="car" class="cn.spring.demo5.Car" >
<!-- 构造方法的注入 (第1种)-->
<constructor-arg name="name" value="宝马"/>
<constructor-arg name="prices" value="100000.00"/>
<!-- 下标索引的方式 (第2种)-->
<constructor-arg index="0" type="java.lang.String" value="奔驰"/>
<constructor-arg index="1" type="java.lang.Double" value="200000"/>
</bean>
setter方法注入:
car2.java
package cn.spring.demo5;
public class Car2 {
private String name;
private Double prices;
public void setName(String name) {
this.name = name;
}
public void setPrices(Double prices) {
this.prices = prices;
}
@Override
public String toString() {
return "Car2 [name=" + name + ", prices=" + prices + "]";
}
}
- setter方法注入
<bean id="car2" class="cn.spring.demo5.Car2" > <!-- property name是属性名称,value是普通的属性的值,ref:引用的是对象 --> <property name="name" value="保时捷"></property> <property name="prices" value="300000"></property> </bean>
- setter方法注入对象属性
<property name="car2" ref="car"/>
名称 空间注入方式
步骤1:现在xml先引入xmlns:p="http://www.springframework.org/schema/p" 如下:#那行是新增的
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
### xmlns:p="http://www.springframework.org/schema/p"###
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
car3.java
package cn.spring.demo5;
public class Car3 {
private String name;
private Double prices;
public void setName(String name) {
this.name = name;
}
public void setPrices(Double prices) {
this.prices = prices;
}
@Override
public String toString() {
return "Car3 [name=" + name + ", prices=" + prices + "]";
}
}
<!-- 名称 空间注入方式,先引入xmlns:p="http://www.springframework.org/schema/p"-->
<bean id="car3" class="cn.spring.demo5.Car3" p:name="奥迪" p:prices="400000"/>
SpEL:属性的注入
Spring3.0提供注入属性方式:
语法:#{表达式}
<bean id="" value="#{表达式}">
car4.java
package cn.spring.demo5;
public class Car4 {
private String name;
private Double prices;
public void setName(String name) {
this.name = name;
}
public void setPrices(Double prices) {
this.prices = prices;
}
@Override
public String toString() {
return "Car4 [name=" + name + ", prices=" + prices + "]";
}
}
<!--SpEL:属性的注入: -->
<bean id="car4" class="cn.spring.demo5.Car4">
<property name="name" value="#{'大众'}"></property>
<property name="prices" value="#{'500000'}"></property>
</bean>
ref引用的是其他id或name对象例子
person.java
package cn.spring.demo5;
public class Person {
private String name;
private Car2 car;
public void setName(String name) {
this.name = name;
}
public void setCar(Car2 car) {
this.car = car;
}
@Override
public String toString() {
return "Person [car=" + car + ", name=" + name + "]";
}
}
<bean id="person1" class="cn.spring.demo5.Person1" p:name="李四" p:car-ref="car2">
</bean>
ref引用的是其他类对象或方法的演示
personinfo.java
package cn.spring.demo5;
public class PersonInfo {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String showname(){
return name+"七";
}
}
引用其他类(personinfo.java)的属性
person2.java
package cn.spring.demo5;
public class Person2 {
private String name;
private Car2 car;
public void setName(String name) {
this.name = name;
}
public void setCar(Car2 car) {
this.car = car;
}
@Override
public String toString() {
return "Person2 [car=" + car + ", name=" + name + "]";
}
}
<!--SpEL:属性的注入:调用属性 -->
<bean id="person2" class="cn.spring.demo5.Person2" >
<!-- property name是属性名称,value是普通的属性的值,ref:引用的是其他id或name对象 -->
<property name="name" value="#{personinfo.name}"></property>
<property name="car" value="#{car2}"></property>
</bean>
<!-- 注意要有get方法 -->
<bean id="personinfo" class="cn.spring.demo5.PersonInfo">
<property name="name" value="#{'王五六'}"></property>
引用其他类(personinfo.java)的方法
package cn.spring.demo5;
public class Person3 {
private String name;
private Car2 car;
public void setName(String name) {
this.name = name;
}
public void setCar(Car2 car) {
this.car = car;
}
@Override
public String toString() {
return "Person3 [car=" + car + ", name=" + name + "]";
}
}
<!--SpEL:属性的注入: 可以调用方法-->
<bean id="person3" class="cn.spring.demo5.Person3" >
<!-- property name是属性名称,value是普通的属性的值,ref:引用的是其他id或name对象 -->
<property name="name" value="#{personinfo.showname()}"></property>
<property name="car" value="#{car2}"></property>
</bean>
测试类编写:
package cn.spring.demo5;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class springtest5 {
@Test
public void demo1() {
ApplicationContext applicationcontext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
Car car=(Car) applicationcontext.getBean("car");
System.out.println(car);
}
@Test
public void demo2() {
ApplicationContext applicationcontext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
Car2 car=(Car2) applicationcontext.getBean("car2");
System.out.println(car);
}
@Test
public void demo2_1() {
ApplicationContext applicationcontext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
Car3 car=(Car3) applicationcontext.getBean("car3");
System.out.println(car);
}
@Test
public void demo2_2() {
ApplicationContext applicationcontext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
Car4 car=(Car4) applicationcontext.getBean("car4");
System.out.println(car);
}
@Test
public void demo3() {
ApplicationContext applicationcontext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
Person person=(Person) applicationcontext.getBean("person");
System.out.println(person);
}
@Test
public void demo3_1() {
ApplicationContext applicationcontext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
Person1 person=(Person1) applicationcontext.getBean("person1");
System.out.println(person);
}
@Test
public void demo3_2() {
ApplicationContext applicationcontext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
Person2 person=(Person2) applicationcontext.getBean("person2");
System.out.println(person);
}
@Test
public void demo3_3() {
ApplicationContext applicationcontext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
Person3 person=(Person3) applicationcontext.getBean("person3");
System.out.println(person);
}
}