Spring学习笔记 ——Bean学习(一)

1. 通过Bean为项目中的类属性进行初始化,常用的有三种方法

第一种方法: 通过property标签为类进行初始化

  1. 在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 +
                '}';
    }

}
  1. 在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>
  1. 在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标签调用构造方法,为类进行初始化

  1. 为Car类中添加一个新的构造方法,构造方法如下
    public Car(String brand, String corp, double price, int maxSpeed) {
        this.brand = brand;
        this.corp = corp;
        this.price = price;
        this.maxSpeed = maxSpeed;
    }
  1. 在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>
  1. 在Main.java文件中测试, 添加测试代码
        Car car2 = (Car) applicationContext.getBean("car2");
        System.out.println(car2);

第三种方法: 通过p:进行配置

  1. 在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>
  1. 在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>

2. 文件中的目录结构

这里写图片描述

猜你喜欢

转载自blog.csdn.net/hzjanger/article/details/82432457