Spring装配bean
创建XML配置规范
在beans元素中配置,一般IDE会自动带的。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context>
<!-- configuration details go there -->
</beans>
声明一个简单的< bean>
<bean id="wheel" class="package.Wheel"/>
<bean id="seat" class="package.Seat"/>
<bean id="engine" class="package.Engine"/>
如果没有写id,则默认为package.Wheel#0
,#0是一种计数的形式,如果还有其他的同类型的没写id的bean,则会为package.Wheel#1
,以此类推。
借助构造器注入初始化bean
首先Car类得要有构造器,有这三个参数。
public Car(Wheel wheel, Seat seat, Engine engine) {
this.wheel = wheel;
this.seat = seat;
this.engine = engine;
}
1.注入bean引用
使用constructor-arg
<bean id="car" class="package.Car">
<constructor-arg ref="whell"/>
<constructor-arg ref="seat"/>
<constructor-arg ref="engine"/>
</bean>
这样就可以将上述三个bean装配进Car bean了。
使用c-命名空间
除了constructor-arg以外,还有c-命名空间。
首先要在XML的顶部声明其模式,如下所示
<?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:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context“>
<!-- configuration details go there -->
</beans>
可见就是多了这条:xmlns:c="http://www.springframework.org/schema/c"
现在写Car bean
<bean id="car" class="wormday.springmvc.test.Car2"
c:wheel-ref="wheel"
c:seat-ref="seat"
c:engine-ref="engine" />
2.注入字面值
假设有个String类型也要初始化,但这不是bean,不能通过上述方法注入。
public Car(String name, String onwer) {
this.name = name;
this.owner = onwer;
}
使用constructor-arg
<bean id="car" class="package.Car">
<constructor-arg value="biyadi">
<constructor-arg value="xiaoming>
</bean>
不是使用ref,而是value属性。这里是按照前后装配的。
使用c-命名空间
<bean id="car" class="package.Car"
c:_name="biyadi"
c:_owner="xiaoming" />
如果只有一个参数的话,就可以c:_="something"
。
通过方法注入bean
现在Car类有Set方法了
public void setWheel(Wheel wheel) {
this.wheel = wheel;
}
public void setSeat(Seat seat) {
this.seat = seat;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
1.注入bean引用
使用property
<bean id="car" class="package.Car">
<property name="wheel" ref="wheel">
<property name="seat" ref="seat">
<property name="engine" ref="engine">
</bean>
这里name属性的内容,是在Car中的属性名。
使用p-命名空间
XML头部需要加一条xmlns:p="http://www.springframework.org/schema/p"
<bean id="car" class="package.Car"
p:wheel-ref="wheel"
p:seat-ref="seat"
p:engine-ref="engine" />
2.注入字面量
使用property
<bean id="car" class="package.Car">
<property name="name" value="biyadi">
<property name="owner" value="xiaoming">
</bean>
使用p-命名空间
<bean id="car" class="package.Car"
p:name="biyadi"
p:owner="xiaoming"
p:wheel-ref="wheel"
p:seat-ref="seat"
p:engine-ref="engine" />
不管是字面量还是bean引用,都是可以混合一起使用的。