继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Java Spring Bean 概述

Curtis_yang
关注TA
已关注
手记 63
粉丝 62
获赞 1091

1、简单java 类,实现 Serializable 接口

package com.curtis.bean;
import java.io.Serializable;
@SuppressWarnings("serial")
public class Person implements Serializable {
    private String name;
    private Integer age;
    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;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
}

2、spring jar包
commons-logging-1.1.3.jar
spring-aop-4.3.3.RELEASE.jar
spring-beans-4.3.3.RELEASE.jar
spring-context-4.3.3.RELEASE.jar
spring-core-4.3.3.RELEASE.jar
spring-expression-4.3.3.RELEASE.jar

3、spring 配置文件,名字叫:applicationContext.xml 这个名称可以自己定义,没必要非要叫applicationContext.xml

applicationContext.xml 文件中

案例1:
<bean id="person" class="com.curtis.bean.Person">
    <property name="name" value="Jerry"></property>
    <property name="age" value="27" />
</bean>

ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
System.out.println(ctx.getBean("person",Perspn.class));
说明:property 标签中的name 属性对应java bean中set 方法后面的内容,后面的value是java bean 对应属性赋值;
getBean方法如果不指明第二个参数,就需要强制类型转换
定义的bean如果在applicationContext.xml 文件中只出现一次,可以通过类名.class 的方式,无需传第二个参数,不需要进行强制类型转换
Person p1=(Person) ctx.getBean("person");
System.out.println(ctx.getBean(Perspn.class));
java bean 中有多个属性,可以给部分属性进行赋值,没有被赋值的属性是对应数据类型的默认值
由于是通过反射的方式,建议明文在java bean 中定义无参数的构造方法
结束标签可以在property 上面直接关闭
也可以通过value 标签进行赋值<value>Jerry</value>
bean 标签、id属性、class属性
property 标签 name属性、value属性
案例2:

public Person(String name) { // 构造方法
    this.name=name;
}

<bean id="person" class="com.curtis.bean.Person">
    <constructor-arg value="Tom"></constructor-arg>
</bean>

说明:通过构造方式的给属性赋值的方式,需要定义无参的构造方法;如果出现构造方法的重载需要通过索引(index)值,或者参数数据类型进行明确到底调用的是哪个构造方法;
index 索引从0开始
type java.lang.String 等
上面两种可以混用
如果只有一个有参的构造方法,可以一句参数列表依次给参数赋值。
如果是数值类型,数据会自动进行转换(String转成数值类型);

<bean id="car" class="com.atguigu.spring.helloworld.Car">
    <constructor-arg value="KUGA" index="1"></constructor-arg>
    <constructor-arg value="ChangAnFord" index="0"></constructor-arg>
    <constructor-arg value="250000" type="float"></constructor-arg>
</bean>
案例3:
特殊字符
<value><![CDATA[<深圳>]]></value>
案例4:
引用类型 ref
人有汽车,一个Person 的类,也有一个Car 的类
分别通过<bean></bean>定义Person、Car
Person bean中可以通过ref 对Car 进行引用
package com.curtis.bean;
import java.io.Serializable;
@SuppressWarnings("serial")
public class Car implements Serializable {
    private String brand;
    private double price;
    public String getBrand() {
        return brand;
    }
    public void setBrand(String brand) {
        this.brand = brand;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    @Override
    public String toString() {
        return "Car [brand=" + brand + ", price=" + price + "]";
    }
    public Car() {
        // TODO Auto-generated constructor stub
    }
}

package com.curtis.bean;
import java.io.Serializable;
@SuppressWarnings("serial")
public class Person implements Serializable {    
    private String name;
    private Integer age;
    private Car car;
    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 Car getCar() {
        return car;
    }    
    public void setCar(Car car) {
        this.car = car;
    }    
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", car=" + car + "]";
    }
    public Person() {

    }    
    public Person(String name) {
        this.name=name;
    }
}

applicationContext.xml 文件中
<bean id="person" class="com.curtis.bean.Person">
    <property name="name" value="Curtis" />
    <property name="car" ref="car"></property>
</bean>
<bean id="car" class="com.curtis.bean.Car">
    <property name="brand" value="Baoma" />
    <property name="price" value="500000" />
</bean>
案例5:
内部bean
<bean id="person" class="com.curtis.bean.Person">
    <property name="car">
        <bean class="com.curtis.bean.Car">
            <property name="brand" value="Audi"></property>
        </bean>
    </property>
</bean>

说明:bean 在property 标签内部;内部bean 不需要指明id属性
案例6:
级联、null(了解)

案例7:
list
一个人可能有多辆车
package com.curtis.bean;
import java.io.Serializable;
import java.util.List;
@SuppressWarnings("serial")
public class Person implements Serializable {
    private String name;
    private Integer age;
    private List<Car> car;
    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 List<Car> getCar() {
        return car;
    }
    public void setCar(List<Car> car) {
        this.car = car;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", car=" + car + "]";
    }
    public Person() {
        // TODO Auto-generated constructor stub
    }
}

<bean id="car1" class="com.curtis.bean.Car">
    <property name="brand" value="Baoma" />
    <property name="price" value="500000" />
</bean>
<bean id="person" class="com.curtis.bean.Person">
    <property name="name" value="Curtis" />
    <property name="car">
        <list>
            <bean class="com.curtis.bean.Car">
                <property name="brand" value="比亚迪" />
            </bean>
            <ref bean="car1"/>
        </list>
    </property>
</bean>
打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP