Spring_配置Bean

说几种开发中常用的bean配置方法:

1.proporty配置:

用proporty配置,实体里要写setter方法

实体:Car.java

package com.lee.spring.beans;

public class Car {
    private String name;
    private int maxSpend;

    public String getName() {
        System.out.println("汽车的getter方法被调用");
        return name;
    }
    public void setName(String name) {
        System.out.println("汽车的setter方法被调用");
        this.name = name;
    }
    public int getMaxSpend() {
        return maxSpend;
    }
    public void setMaxSpend(int maxSpend) {
        this.maxSpend = maxSpend;
    }
    @Override
    public String toString() {
        return "Car [name=" + name + ", maxSpend=" + maxSpend + "]";
    }

}

Car-ApplicationContext.xml代码:

<!--这里的id="car",其中引号里的car是自定义的,但是通常写为类名的小写。-->
<bean id="car" class="com.lee.spring.beans.Car">
    <property name="name" value="迈巴赫"/>
    <property name="maxSpend" value="450"/>
</bean>

TestCar.java代码:

public class TestCar {

    public static void main(String[] args) {
        ApplicationContext act=new ClassPathXmlApplicationContext("Car-ApplicationContext.xml");
    //下面引号里的car和上面代码中id="car"是对应的
        Car car=(Car) act.getBean("car");
        System.out.println(car.toString());
    }
}

运行截图:
这里写图片描述

2.constructor-arg配置

用constructor-arg配置,实体只需要有参构造,不需要无参构造,不需要setter方法

Book代码:
注意:这里的Book类只有一个构造方法。

public class Book {
    private String name;
    private Integer page;

public Book(String name, Integer page) {
    System.out.println("Book的构造方法执行");
        this.name = name;
        this.page = page;
    }

@Override
public String toString() {
    return "Book [name=" + name + ", page=" + page + "]";
}

Book-ApplicationContext.xml代码:

<bean id="book" class="com.lee.spring.beans.Book">
    <constructor-arg name="name" value="白夜行"/>
    <constructor-arg name="page" value="400"/>
</bean>

TestBook代码:

public class TestBook {

    public static void main(String[] args) {
        ApplicationContext act=new ClassPathXmlApplicationContext("Book-ApplicationContext.xml");
        Book book= act.getBean("book",Book.class);
        System.out.println(book.toString());
    }
}

运行截图:
这里写图片描述

3.用p命名空间配置:

p命名空间用实体的setter方法
P命名空间作用是简化配置,需要先引入p的namespace

Car.java代码:

public class Car {
    private String name;
    private int maxSpend;

    public String getName() {
        System.out.println("汽车的getter方法被调用");
        return name;
    }
    public void setName(String name) {
        System.out.println("汽车的setter方法被调用");
        this.name = name;
    }
    public int getMaxSpend() {
        return maxSpend;
    }
    public void setMaxSpend(int maxSpend) {
        this.maxSpend = maxSpend;
    }
    @Override
    public String toString() {
        return "Car [name=" + name + ", maxSpend=" + maxSpend + "]";
    }   
}

Car-p-ApplicationContext.xml代码:

<bean id="car2" class="com.lee.spring.beans.Car"
        p:name="宾利" 
        p:maxSpend="420"
    />

TestCar2.java代码:

public class TestCar2 {

    public static void main(String[] args) {
        ApplicationContext act=new ClassPathXmlApplicationContext("Car-p-ApplicationContext.xml");
        Car car2=(Car) act.getBean("car2");
        System.out.println(car2.toString());
    }
}

运行截图:
这里写图片描述

4.bean之间的引用:

Student.Java代码:

public class Student {

    private String name;
    private int age;
    private Book book;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        System.out.println("Student的setter方法被调用");
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Book getBook() {
        return book;
    }
    public void setBook(Book book) {
        this.book = book;
    }
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + ", book=" + book + "]";
    }

}

Book.java代码:
注意:这里的Book类只有一个构造方法。

public class Book {
    private String name;
    private Integer page;

public Book(String name, Integer page) {
    System.out.println("Book的构造方法执行");
        this.name = name;
        this.page = page;
    }

@Override
public String toString() {
    return "Book [name=" + name + ", page=" + page + "]";
}

Student-ApplicationContext.xml代码:

<bean id="books" class="com.lee.spring.beans.Book">
    <constructor-arg name="name" value="白夜行"/>
    <constructor-arg name="page" value="400"/>
</bean>

<bean id="student" class="com.lee.spring.beans.Student">
    <property name="name" value="夏洛"/>
    <property name="book" ref="books"/>
</bean>

TestStudent代码:

public static void main(String[] args) {
        ApplicationContext act=new ClassPathXmlApplicationContext("Student-ApplicationContext.xml");
        Student s=(Student) act.getBean("student");
        System.out.println(s.toString());
}

这里写图片描述

5.内部bean配置:

注意:
内部的bean一定要有默认构造,一定要有setter方法。两个一定都要有,两个一定都要有!

Student.Java代码:

public class Student {

    private String name;
    private int age;
    private Book book;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        System.out.println("Student的setter方法被调用");
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Book getBook() {
        return book;
    }
    public void setBook(Book book) {
        this.book = book;
    }
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + ", book=" + book + "]";
    }

}

Book.java代码:
注意:一定要有setter方法和默认构造。

package com.lee.spring.beans;

public class Book {
    private String name;
    private Integer page;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
        System.out.println("Book的setter方法执行");
    }

    public Integer getPage() {
        return page;
    }

    public void setPage(Integer page) {
        this.page = page;
    }

    public Book() {
        super();
        System.out.println("Book的默认构造方法执行");
    }

    public Book(String name, Integer page) {
        System.out.println("Book的构造方法执行");
        this.name = name;
        this.page = page;
    }

    @Override
    public String toString() {
        return "Book [name=" + name + ", page=" + page + "]";
    }
}

Student-ApplicationContext.xml代码:

<bean id="student2" class="com.lee.spring.beans.Student">
    <property name="name" value="大春"/>
    <property name="age" value="20"/>
    <property name="book" >
        <bean class="com.lee.spring.beans.Book">
            <property name="name" value="巴黎圣母院"/>
            <property name="page" value="460"/>
        </bean>
    </property> 
</bean> 

TestStudent.Java代码:

public class TestStudent {

    public static void main(String[] args) {
        ApplicationContext act=new ClassPathXmlApplicationContext("Student-ApplicationContext.xml");

        Student s2=(Student) act.getBean("student2");
        System.out.println(s2.toString());

    }
}

运行截图:
这里写图片描述

注意这里的执行顺序(和代码写的先后顺序无关):
①内部bean的默认构造
②内部bean的setter方法

6.list方式配置bean

如果一个叫马云的boss,有3块watch,而且要求说明每块watch的属性,怎么办呢?其中一种方法可以用list

Boss.Java代码:

package com.lee.spring.beans;

import java.util.List;

public class Boss {

    private String name;
    private List<Watch> watch;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        System.out.println("Boss的setter方法调用");
        this.name = name;
    }

    public List<Watch> getWatch() {
        return watch;
    }

    public void setWatch(List<Watch> watch) {
        this.watch = watch;
    }

    @Override
    public String toString() {
        return "Boss [name=" + name + ", watch=" + watch + "]";
    }

}

Watch.Java代码:

package com.lee.spring.beans;

public class Watch {

    private String name;
    private String color;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        System.out.println("Watch的setter方法调用");
        this.name = name;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    @Override
    public String toString() {
        return "Watch [name=" + name + ", color=" + color + "]";
    }

}

Boss-Watch-ApplicationContext.xml代码:

<!-- 配置watch -->
<bean id="watch1" class="com.lee.spring.beans.Watch">
    <property name="name" value="劳力士"/>
    <property name="color" value="red"/>
</bean>
<bean id="watch2" class="com.lee.spring.beans.Watch">
    <property name="name" value="浪琴"/>
    <property name="color" value="blue"/>
</bean>
<bean id="watch3" class="com.lee.spring.beans.Watch">
    <property name="name" value="卡西欧"/>
    <property name="color" value="green"/>
</bean>

<!-- list方式配置bean -->
<bean id="boss" class="com.lee.spring.beans.Boss">
    <property name="name" value="马云"/>
    <property name="watch">
        <list>
            <ref bean="watch1"/>
            <ref bean="watch2"/>
            <ref bean="watch3"/>
        </list>
    </property>
</bean>

TestBossWatch.java 代码:

public class TestBossWatch {

    public static void main(String[] args) {
        ApplicationContext act=new ClassPathXmlApplicationContext("Boss-Watch-ApplicationContext.xml");
        Boss boss= (Boss) act.getBean("boss");
        System.out.println(boss.toString());
    }
}

运行截图:
这里写图片描述

7.map方式配置bean

有一个叫李彦宏的人有两辆汽车,而且要说明汽车的属性。可以用map做。

Car.java代码:

package com.lee.spring.beans;

public class Car {
    private String name;
    private int maxSpend;

    public String getName() {
        System.out.println("汽车的getter方法被调用");
        return name;
    }
    public void setName(String name) {
        System.out.println("汽车的setter方法被调用");
        this.name = name;
    }
    public int getMaxSpend() {
        return maxSpend;
    }
    public void setMaxSpend(int maxSpend) {
        this.maxSpend = maxSpend;
    }
    @Override
    public String toString() {
        return "Car [name=" + name + ", maxSpend=" + maxSpend + "]";
    }   
}

Person.Java代码:

package com.lee.spring.beans;

import java.util.Map;

import com.lee.spring.beans.Car;

public class Person {

    private String name;
    private Map<String, Car> car;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Map<String, Car> getCar() {
        return car;
    }

    public void setCar(Map<String, Car> car) {
        System.out.println("map的set方法执行");
        this.car = car;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", car=" + car + "]";
    }

}

Person-Car-ApplicationContext.xml代码:

<!-- 配置Car -->
<bean id="car1" class="com.lee.spring.beans.Car">
    <property name="name" value="保时泰"/>
    <property name="maxSpend" value="260"/>
</bean>

<bean id="car2" class="com.lee.spring.beans.Car">
    <property name="name" value="法拉太"/>
    <property name="maxSpend" value="340"/>
</bean>

<!-- map方式配置bean -->
<bean id="person" class="com.lee.spring.beans.Person">
    <property name="name" value="李彦宏"/>
    <property name="car">
        <map>
            <entry key="a" value-ref="car1"></entry>
            <entry key="b" value-ref="car2"></entry>
        </map>
    </property>
</bean>

TestPersonCar.Java代码:

public class TestPersonCar {

    public static void main(String[] args) {
        ApplicationContext act=new ClassPathXmlApplicationContext("Person-Car-ApplicationContext.xml");
        Person person= (Person) act.getBean("person");
        System.out.println(person.toString());
    }
}

运行截图:
这里写图片描述

8.特殊的proporties

DataSource.Java代码:

package com.lee.spring.beans;

import java.util.Properties;

public class DataSource {

    private Properties properties;

    public Properties getProperties() {
        return properties;
    }

    public void setProperties(Properties properties) {
        this.properties = properties;
    }

    @Override
    public String toString() {
        return "DataSource [properties=" + properties + "]";
    }

}

DataSource-ApplicationContext.xml代码:

<!-- 配置Proporties属性 -->
<bean id="dataSource" class="com.lee.spring.beans.DataSource">
    <property name="properties">
        <props >
            <prop key="username">root</prop>
            <prop key="password">123456</prop>
            <prop key="jdbcUrl">jdbc:mysql:</prop>
            <prop key="driverClass">com.mysql.jdbc.Driver</prop>
        </props>
    </property>
</bean>

TestDataSource.Java代码:

public class TestDataSource {

    public static void main(String[] args) {
        ApplicationContext act=new ClassPathXmlApplicationContext("DataSource-ApplicationContext.xml");
        DataSource dataSource=(DataSource) act.getBean("dataSource");
        System.out.println(dataSource.toString());

    }
}

运行截图:
这里写图片描述

9.uitl的用法:

需要导入util的命名空间

ApplicationContext.xml代码:

<!-- 配置watch -->
<bean id="watch1" class="com.lee.spring.beans.Watch">
    <property name="name" value="劳力士"/>
    <property name="color" value="red"/>
</bean>
<bean id="watch2" class="com.lee.spring.beans.Watch">
    <property name="name" value="浪琴"/>
    <property name="color" value="blue"/>
</bean>
<!--配置util-->
<util:list id="watchs" >
    <ref bean="watch1"/>
    <ref bean="watch2"/> 
</util:list>

<!--引用-->
<bean id="boss" class="com.lee.spring.beans.Boss">
    <property name="name" value="马化腾"/>
    <property name="watch" ref="watchs">

    </property>
</bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值