1. 通过Bean为项目中的类属性进行初始化,常用的有三种方法
第一种方法: 通过property标签为类进行初始化
- 在src路径下建立一个包, 包名叫做com.hzj.spring.bean,在com.hzj.spring.bean路径下建立一个Car类
package com.hzj.spring.bean;
public class Car {
private String brand; //品牌
private String corp; //公司
private double price; //价格
private int maxSpeed; //最大速度
//这个空构造方法不能省略,如果重载了构造方法,使用property标签时会报错
public Car() {
}
//这里省略了每个属性的get和set方法,自己添加get和set方法,不然在配置Bean的时候会报错
//...
@Override
public String toString() {
return "Car{" +
"brand='" + brand + '\'' +
", corp='" + corp + '\'' +
", price=" + price +
", maxSpeed=" + maxSpeed +
'}';
}
}
- 在src目录下新建一个beans-relation.xml文件, 这个文件是用来配置Bean的, 里面的内容如下
<?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">
<!--
id表示这个Bean的唯一标识, 在同一个xml文件中, Bean的id不能有相同的(内部Bean除外)
class表示这个Bean所要配置的类在src文件下的路径
当调用IOC容器时, Bean会创建相应的对象, 会调用类中的空构造方法, 所以在类中空构造方法不能省略,最好自己将空构造方法在写一遍
-->
<bean id="car1" class="com.hzj.spring.bean.Car">
<!--
name与类中的set方法名相同, value为所设置的值
<property name="corp" value="xxx公司"></property>
name="corp"调用了Car类中的setCorp方法, value="xxx公司"给String corp赋值
public void setCorp(String corp) {
this.corp = corp;
}
-->
<property name="corp" value="xxx公司"></property>
<property name="brand" value="xxx系列"></property>
<property name="price" value="998"></property>
<property name="maxSpeed" value="250"></property>
</bean>
</beans>
- 在com.hzj.spring.bean包下创建一个Main.java文件,用来做测试的
package com.hzj.spring.bean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
//创建Spring 的ioc容器对象
//ClassPathXmlApplicationContext: 从类路径下加载配置文件
//beans-relation.xml表示beans-relation.xml文件在src文件下的路径
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans-relation.xml");
//从IOC容器中获取Bean的实例
//利用id定位到IOC容器中的Bean
HelloWorld helloWorld = (HelloWorld) applicationContext.getBean("helloWorld");
Car car = (Car) applicationContext.getBean("car1");
System.out.println(car);
}
}
第二种方法: 通过constructor-arg标签调用构造方法,为类进行初始化
- 为Car类中添加一个新的构造方法,构造方法如下
public Car(String brand, String corp, double price, int maxSpeed) {
this.brand = brand;
this.corp = corp;
this.price = price;
this.maxSpeed = maxSpeed;
}
- 在beans-relation.xml文件中添加如下代码, constructor-arg的type属性的值与类中的构造方法一一对应
<bean id="car2" class="com.hzj.spring.bean.Car">
<constructor-arg type="java.lang.String">
<!--字面值包含特殊字符可以使用<![CDATA[]]>包裹起来-->
<value><![CDATA[<xxx系列>]]></value>
</constructor-arg>
<constructor-arg type="java.lang.String">
<!--可以使用value直接配置, 也可以通过value属性直接配置-->
<value>xxx公司</value>
</constructor-arg>
<!--价格-->
<constructor-arg value="998" type="double"></constructor-arg>
<!--最大速度-->
<constructor-arg value="250" type="int"></constructor-arg>
</bean>
- 在Main.java文件中测试, 添加测试代码
Car car2 = (Car) applicationContext.getBean("car2");
System.out.println(car2);
第三种方法: 通过p:进行配置
- 在beans-relation.xml文件中添加代码
<bean id="car3" class="com.hzj.spring.bean.Car"
p:brand="xxx系列" p:corp="xxx公司" p:price="998" p:maxSpeed="250">
</bean>
- 在Main中进行测试, 在Main.java中添加一下代码
Car car3 = (Car) applicationContext.getBean("car3");
System.out.println(car3);
2. 项目的目录结构
1. 文件中的代码
Car.java
package com.hzj.spring.bean;
public class Car {
private String brand; //品牌
private String corp; //公司
private double price; //价格
private int maxSpeed; //最大速度
public Car() {
}
public Car(String brand, String corp, double price, int maxSpeed) {
this.brand = brand;
this.corp = corp;
this.price = price;
this.maxSpeed = maxSpeed;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getCorp() {
return corp;
}
public void setCorp(String corp) {
this.corp = corp;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getMaxSpeed() {
return maxSpeed;
}
public void setMaxSpeed(int maxSpeed) {
this.maxSpeed = maxSpeed;
}
@Override
public String toString() {
return "Car{" +
"brand='" + brand + '\'' +
", corp='" + corp + '\'' +
", price=" + price +
", maxSpeed=" + maxSpeed +
'}';
}
}
Main.java
package com.hzj.spring.bean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans-relation.xml");
Car car1 = (Car) applicationContext.getBean("car1");
System.out.println(car1);
Car car2 = (Car) applicationContext.getBean("car2");
System.out.println(car2);
Car car3 = (Car) applicationContext.getBean("car3");
System.out.println(car3);
}
}
beans-relation.xml
<?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">
<bean id="car1" class="com.hzj.spring.bean.Car">
<property name="corp" value="xxx公司"></property>
<property name="brand" value="xxx系列"></property>
<property name="price" value="998"></property>
<property name="maxSpeed" value="250"></property>
</bean>
<bean id="car2" class="com.hzj.spring.bean.Car">
<constructor-arg type="java.lang.String">
<!--字面值包含特殊字符可以使用<![CDATA[]]>包裹起来-->
<value><![CDATA[<xxx系列>]]></value>
</constructor-arg>
<constructor-arg type="java.lang.String">
<!--可以使用value直接配置, 也可以通过value属性直接配置-->
<value>xxx公司</value>
</constructor-arg>
<!--价格-->
<constructor-arg value="998" type="double"></constructor-arg>
<!--最大速度-->
<constructor-arg value="250" type="int"></constructor-arg>
</bean>
<bean id="car3" class="com.hzj.spring.bean.Car"
p:brand="Audi" p:corp="上海" p:price="300000" p:maxSpeed="250">
</bean>
</beans>