Spring框架学习笔记(3)——配置bean

1、属性注入

(1)根据setter方法属性注入,这里使用的是property标签。需要bean属性提供对应的setter方法,比如笔记(1)里的 HelloWorld使用的就是这种方法。

<!-- 根据setter方法属性注入 -->
<bean id="helloworld" class="com.broadtext.beans.Helloworld">
    <property name="name" value="Helloworld"></property>
</bean>

(2)根据构造器属性注入,这里使用的是constructor-arg标签。可以不提供setter方法,但是要提供对应的构造器,如果缺少构造器或者构造器里缺少属性就会报错。可以指定参数的位置(index)和类型(type)以区分参数。特殊字符可以使用<![CDATA[<Shanghai>]]>

<!-- 根据构造器属性注入,可以指定参数的位置和类型以区分参数 -->
<bean id="car" class="com.broadtext.beans.Car">
    <constructor-arg index="0" value="Audi"></constructor-arg>
    <constructor-arg value="Shanghai"></constructor-arg>
    <constructor-arg type="double" value="300000"></constructor-arg>
</bean>
<bean id="car2" class="com.broadtext.beans.Car">
    <constructor-arg value="BMW"></constructor-arg>
    <constructor-arg>
        <value><![CDATA[<Shanghai>]]></value>
    </constructor-arg>
    <constructor-arg type="int" value="240"></constructor-arg>
</bean>

2、通过ref属性建立bean之间的关系,这里在创建person bean的时候会将配置好的car2作为属性注入到person bean里,如果ref指向一个不存在的bean会报undefine错误。

<!-- ref属性建立bean之间的关系 -->
<bean id="person" class="com.broadtext.beans.Person">
    <property name="name" value="Tom"></property>
    <property name="age" value="24"></property>
    <property name="car" ref="car2"></property>
</bean>

3、配置内部bean

<!-- 内部bean不能被外部使用 -->
<bean id="person1" class="com.broadtext.beans.Person">
    <property name="name" value="Tom"></property>
    <property name="age" value="24"></property>
    <property name="car">
        <bean class="com.broadtext.beans.Car">
            <constructor-arg value="Ford"></constructor-arg>
            <constructor-arg value="Shanghai"></constructor-arg>
            <constructor-arg type="double" value="300000"></constructor-arg>
        </bean>
    </property>
</bean>

4、null值的注入

<!-- 测试null值和构造注入 -->
<bean id="person2" class="com.broadtext.beans.Person">
    <constructor-arg value="Jreey"></constructor-arg>
    <constructor-arg value="24"></constructor-arg>
    <constructor-arg><null></null></constructor-arg>
</bean>

5、为级联属性注入

<!-- 级联属性赋值 -->
<bean id="person3" class="com.broadtext.beans.Person">
    <constructor-arg value="Jreey"></constructor-arg>
    <constructor-arg value="24"></constructor-arg>
    <!-- 要先初始化才可以为级联属性赋值,否则会报null错误 -->
    <constructor-arg ref="car"></constructor-arg>
    <property name="car.maxSpeed" value="250"></property>
</bean>

6、Car.java、Person.java、Main.java

Car.java

package com.broadtext.beans;

public class Car {
    private String brand;
    private String corp;
    private double price;
    private int maxSpeed;

    public Car(String brand, String corp, double price) {
        super();
        this.brand = brand;
        this.corp = corp;
        this.price = price;
    }

    public Car(String brand, String corp, int maxSpeed) {
        super();
        this.brand = brand;
        this.corp = corp;
        this.maxSpeed = maxSpeed;
    }

    @Override
    public String toString() {
        return "Car [brand=" + brand + ", corp=" + corp + ", price=" + price + ", 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;
    }

}

Person.java

package com.broadtext.beans;

public class Person {
    private String name;
    private int age;
    private Car car;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int 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, int age, Car car) {
        super();
        this.name = name;
        this.age = age;
        this.car = car;
    }

}

Main.java

package com.broadtext.beans;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

    public static void main(String[] args) {

        //ApplicationContext IOC容器
        //ClassPathXmlApplicationContext IOC容器的实现类
        //走完这一步就会创建出XML里面配的bean
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        //根据配置bean的id获取
        Helloworld helloworld = (Helloworld) ctx.getBean("helloworld");
        System.out.println(helloworld.getName());
        //根据配置bean的类型获取
        helloworld = ctx.getBean(Helloworld.class);
        System.out.println(helloworld.getName());

        //构造器属性注入
        Car car = (Car) ctx.getBean("car");
        System.out.println(car.toString());
        car = (Car) ctx.getBean("car2");
        System.out.println(car.toString());

        //ref
        Person person = (Person) ctx.getBean("person");
        System.out.println(person.toString());
        //内部bean
        person = (Person) ctx.getBean("person1");
        System.out.println(person.toString());
        person = (Person) ctx.getBean("person2");
        System.out.println(person.toString());
        person = (Person) ctx.getBean("person3");
        System.out.println(person.toString());

    }

}
时间: 2024-10-07 17:53:00

Spring框架学习笔记(3)——配置bean的相关文章

跟着刚哥学习Spring框架--通过XML方式配置Bean(三)

Spring配置Bean有两种形式(XML和注解) 今天我们学习通过XML方式配置Bean 1. Bean的配置方式 通过全类名(反射)的方式   √ id:标识容器中的bean.id唯一. √ class:bean的全类名,通过反射的方式在IOC容器中创建Bean,所以要求Bean中必须有无参的构造器 2.依赖注入的方式 1)属性注入:通过setter方法注入Bean的属性值或依赖的对象 属性注入使用<Property>元素,使用name指定Bean的属性名称,使用value指定Bean的属

跟着刚哥学习Spring框架--通过注解方式配置Bean(四)

组件扫描:Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 特定组件包括: 1.@Component:基本注解,识别一个受Spring管理的组件 2.@Respository:标识持久层组件 3.@Service:标识业务层组件 4.@Controller:标识表现层组件 Spring 有默认的命名策略: 使用非限定类名, 第一个字母小写. 也可以在注解中通过 value 属性值标识组件的名称 当在组件类上使用了特定的注解之后, 还需要在 Spring 的配置文件

spring框架学习笔记7:事务管理及案例

Spring提供了一套管理项目中的事务的机制 以前写过一篇简单的介绍事务的随笔:http://www.cnblogs.com/xuyiqing/p/8430214.html 还有一篇Hibernate的事务管理:http://www.cnblogs.com/xuyiqing/p/8449167.html 可以做个对比 Spring管理事务特有的属性: 事务传播行为:事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行. 例

spring框架学习笔记(一)

仅为个人笔记,方便自己日后查看. eclipse安装spring插件的方法: http://jingyan.baidu.com/article/1612d5005fd087e20f1eee10.html 使用maven添加spring需要的jar包. 几个必须的jar包:core.bean.context.express.另外依赖一个日志包commons—logging pom.xml文件中为了统一版本,因此在properties写了版本号如下: <properties> <!-- sp

spring框架学习笔记(二)

配置Bean Ioc容器 Ioc容器需要实例化以后才可以从Ioc容器里获取bean实例并使用. spring提供两种方式类型的Ioc容器实现: BeanFactory:底层的,面向spring框架的. ApplicationContext :面向开发人员的,一般用这个. 有两个实现类: ClassPathXmlApplicationContext:从类路径下加载配置文件. FileSystemXmlApplicationContext:从文件系统中加载配置文件. 两种方式配置文件是相同的. 通过

spring框架学习笔记(十)

通过注解的方式配置bean Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 即,想要实现注解的方式配置bean需要满足2个条件: 类上面标注特定组件,如:@Component.@Service.@Repository.@Controller 在配置文件中增加bean-scan:<context:component-scan base-package="com.pfSoft.annotation"></context:component

spring框架学习笔记(三)

接上一节,配置bean的关联关系: 新增bean实体类Manufacture 代码如下: 其中要在Manufacture中包含对ProductEntity的引用. public class Manufacture { private String manName; private ProductEntity product; /** * * @return the manName */ public String getManName() { return manName; } /** * @p

spring框架学习笔记(九)

通过工厂方法配置bean 通过指向静态工厂的全类名,及factory-method,传入参数获取bean. 配置为: <bean id="schoolBean" class="com.pfSoft.beanFactory.myFactory" factory-method="getSchool"> <constructor-arg value="wuda"></constructor-arg>

spring框架学习笔记(八)

bean的生命周期 在配置bean的时候指定 bean的初始化方法和析构函数. 下面的例子展示了从Ioc容器创建到创建bean实例到Ioc容器销毁的过程. 配置文件如下: <bean id="flowerBean2" class="com.pfSoft.spel.Flower" init-method="testInitFun" destroy-method="testDestory"> <property