Spring框架学习笔记(5)——自动装配

1、通过bean标签的autowire属性可以实现bean属性的自动装配。

  创建一个新的Spring配置文件beans-autowire.xml,这里我们配置了3个bean,Address、Car、People,其中People自动装配了另外两个bean,使用的是bean标签的autowire属性,这个例子里如果将car改为car2打印出来的Person bean 的Car属性为null,即byName根据bean的setter风格进行自动装配有就装没有就不装。而使用byType的话如果配置有两个类型相同的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-3.1.xsd">

    <bean id="address" class="com.broadtext.beans.autowire.Address">
        <property name="city" value="Hefei"></property>
        <property name="street" value="Feixilu"></property>
    </bean>

    <bean id="car" class="com.broadtext.beans.autowire.Car">
        <property name="brand" value="Audi"></property>
        <property name="price" value="300000"></property>
    </bean>

    <!-- 可以使用autowire属性指定自动装配的方式,
    byName根据bean的setter风格进行自动装配有就装没有就不装,
    byType根据bean的类型和bean的属性的类型进行自动装配,一个以上类型匹配则抛异常
     -->
    <bean id="person" class="com.broadtext.beans.autowire.Person" autowire="byName" p:name="hj"></bean>

</beans>

2、Address.java、Car.java、People.java、Main.java

Address.java

package com.broadtext.beans.autowire;

public class Address {
    private String city;
    private String street;

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    @Override
    public String toString() {
        return "Address [city=" + city + ", street=" + street + "]";
    }
}

Car.java

package com.broadtext.beans.autowire;

public class Car {
    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() {
        System.out.println("car`s construstor");
    }

}

People.java

package com.broadtext.beans.autowire;

public class Person {
    private String name;
    private Address address;
    private Car car;

    public String getName() {
        return name;
    }

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

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public Car getCar() {
        return car;
    }

    public void setCar(Car car) {
        this.car = car;
    }

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

Main.java

package com.broadtext.beans.autowire;

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

public class Main {

    /**
     * <p>Description: 测试bean的自动装配</p>
     */
    public static void main(String[] args) {

        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-autowire.xml");
        Person person = (Person) ctx.getBean("person");
        System.out.println(person);
    }

}
时间: 2024-11-09 11:29:20

Spring框架学习笔记(5)——自动装配的相关文章

Spring4.0学习笔记(2) —— 自动装配

Spring IOC 容器可以自动装配Bean,需要做的是在<bean>的autowire属性里指定自动装配的模式 1)byType 根据类型自动装配,若IOC 容器中有多个目标Bean类型一致的Bean,Spring将无法判定哪个Bean最适合该属性,不能执行自动装配 2)byName 根据名称自动装配,必须将目标Bean名称和属性名设置的完全相同 配置方法: Address.java package com.spring.autowire; public class Address { p

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

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

spring框架学习笔记(四)

自动装配 通过id名字进行自动装配 新建测试用的两个bean类:ClassRoom.Teacher 代码如下: Teacher类: public class Teacher { private Integer teacherNo; private String name; /** * * @return the teacherNo */ public Integer getTeacherNo() { return teacherNo; } /** * @param teacherNo the t

spring框架学习笔记(二)

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

Spring框架学习笔记(8)——AspectJ实现AOP

使用代理对象实现AOP虽然可以满足需求,但是较为复杂,而Spring提供一种简单的实现AOP的方法AspectJ 同样的计算器的DEMO 首先配置applicationContext.xml <!-- 配置自动扫描的包 --> <context:component-scan base-package="com.atguigu.spring.aop"></context:component-scan> <!-- 配置自动为匹配 aspectJ 注

spring框架学习笔记3:使用注解代替配置文件

1.导入context约束:spring-context-4.2.xsd 2.design模式打开xml配置文件,右键edit namespaces,点击add添加 完成后应该是这样: 配置文件中这样写即可: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="

spring框架学习笔记4:SpringAOP实现原理

AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善.OOP引入封装.继承.多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合.不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能.日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性.异常处理和透明的持续性也都是如此,这种散布在各

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

AL Spring框架学习笔记

1.开闭原则 面向对象编程: (1)对修改关闭(尽量不要修改源码) (2)对扩展开放 2.容器 能取出和放入对象的东西 3.Bean 容器中放入的东西 4.spring xml <bean id="boy1" class="com.alipay.demo.CalabashBoy">(实例化) <property name="name"(找set方法) value="大娃"/>(注入属性) <pro