Spring-4:bean的自动装配及一些问题
来源:互联网 发布:数据选择器 数据开关 编辑:程序博客网 时间:2024/05/21 06:55
在XML文件中配置bean的自动装配:
准备三个测试类:
package com.atguigu.spring.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;}@Overridepublic String toString() {return "Address [city=" + city + ", street=" + street + "]";}}
package com.atguigu.spring.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;}@Overridepublic String toString() {return "Car [brand=" + brand + ", price=" + price + "]";}}
package com.atguigu.spring.beans.autowire;public class Person {private String name;private Address address;private Car car2;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 car2;}public void setCar(Car car2) {this.car2 = car2;}@Overridepublic String toString() {return "Person [name=" + name + ", address=" + address + ", car=" + car2+ "]";}}
Spring IOC 容器可以自动装配 Bean. 需要做的仅仅是在 <bean> 的 autowire 属性里指定自动装配的模式,模式有三种:
1、byType(根据类型自动装配): 若 IOC 容器中有多个与目标 Bean 类型一致的 Bean. 在这种情况下, Spring 将无法判定哪个 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"><bean id = "address" class="com.atguigu.spring.beans.autowire.Address" p:city="NanJing" p:street="AndeMen"></bean><bean id = "car2333" class="com.atguigu.spring.beans.autowire.Car" p:brand="Aodi" p:price="300000"></bean><bean id="person" class="com.atguigu.spring.beans.autowire.Person" p:name="petter" autowire="byName"></bean></beans>只要类型一致即可,但是如果类型对应多个bean,会出异常。
2、byName(根据名称自动装配):
<?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 = "address" class="com.atguigu.spring.beans.autowire.Address" p:city="NanJing" p:street="AndeMen"></bean><bean id = "car2" class="com.atguigu.spring.beans.autowire.Car" p:brand="Aodi" p:price="300000"></bean><bean id="person" class="com.atguigu.spring.beans.autowire.Person" p:name="petter" autowire="byName"></bean></beans>注意事项:
这里有一个id为car2的bean,person类中有一个属性为car2,但是输出如下:
可见并没有自动装配成功,如果将xml文件中的Car类的bean的id改为car,无论Person中Car类的引用名改成什么(比如car2),都可以自动装配。
在xml将第一个Car类的bean的id改为car,并新加一个bean:
<bean id = "car2" class="com.atguigu.spring.beans.autowire.Car" p:brand="baoma" p:price="500000"></bean>
输出如下:
仍然自动装配第一个bean,由此我推测byName自动装配应该是根据类名找bean的。
3、constructor(通过构造器自动装配): 当 Bean 中存在多个构造器时, 此种自动装配方式将会很复杂. 不推荐使用
总结:bean自动装配看似方便,但是灵活性较差,也不能对引用的bean中某个属性单独设置,如果某个类对应多个bean还会报异常。所以在项目开发中还是尽量不要使用。
0 0
- Spring-4:bean的自动装配及一些问题
- Spring自动装配及bean的生命周期
- Spring Bean的装配 -- 自动装配
- [Spring]Bean的自动装配
- # Spring Bean 的自动装配
- spring bean的自动装配
- spring bean的自动装配
- Spring的自动装配Bean
- Spring bean的自动装配
- 【Spring】Bean的自动装配
- Spring Bean的自动装配
- Spring bean的自动装配
- spring <bean>的自动装配
- Spring Bean的自动装配,注入及后处理器
- Spring Bean装配-自动装配
- Spring自动装配、模版装配及定制Bean
- Spring Bean--自动装配
- Spring Bean 自动装配
- 渐变
- 函数指针
- Android 来电(包括铃声),短信拦截的实现方法
- HDU 4984 / BC 6D Goffi and Graph
- PAT1025 反转链表
- Spring-4:bean的自动装配及一些问题
- 关于虚函数
- python urllib2介绍
- Poj 2752
- HDU 1517 A Multiplication Game(博弈)
- 安卓开发之消息机制和AsyncTask实现的基本原理
- MPLS-5 MPLS-VPN
- ARC下需要注意的内存管理
- 学习网址记录