Bean元素
Bean元素: 使用该元素描述需要Spring容器管理的对象
class属性 被管理对象的完整类名
name属性 给被管理对象取个名字,获取对象时根据该名称获取对象
可以重复可以使用特殊字符
id属性 与name一模一样
名称不可以重复,不可以使用特殊字符
结论: 尽量使用name属性
<bean name="user" class="com.zhicheng.domain.User" ></bean>
三种对象创建方式
空参数构建创建
<bean name="user" class="com.zhicheng.domain.User" ></bean>
静态工厂创建(了解)
public class UserFactory {
//静态工厂创建方式
public static User createUser2(){
System.out.println("静态工厂创建方式");
return new User();
}
public User createUser3(){
System.out.println("实例工厂创建方式");
return new User();
}
}
<!-- 创造方法二静态工厂创建 -->
<bean name="user2"
class="com.zhicheng.domain.UserFactory"
factory-method="createUser2"
>
</bean>
实例工厂创建(了解)
public class UserFactory {
//静态工厂创建方式
public static User createUser2(){
System.out.println("静态工厂创建方式");
return new User();
}
public User createUser3(){
System.out.println("实例工厂创建方式");
return new User();
}
}
<!-- 创造方法三实例工厂创建 -->
<bean name="user3"
factory-bean="UserFactory"
factory-method="createUser3"
>
</bean>
<bean name="UserFactory" class="comzhicheng.domain.UserFactory"></bean>
Scope属性
<!-- scope属性
singleton(默认值):单例对象,被标识为单例的对象在Spring中只会存在一个实例
prototype:多例原型,被标识为多例的对象,每次再获得才会创建,每次创建都是新的对象,整合Struts2的时候ActionBean必须配置成多例的
request(了解,基本不用)web环境下对象与request生命周期一致
session(了解,基本不用)web环境下对象与session生命周期一致
-->
<bean name="user" class="com.zhicheng.domain.User" scope="singleton" ></bean>
初始化销毁方法
在类中定义方法
<bean name="user" class="com.zhicheng.domain.User" scope="singleton" init-method="ini" destroy-method="destroy"></bean>
模块化配置
<import resource="相对路径"/>
Spring的4种注入方式
set方法注入(重点)
car为引用数据类型
<!-- set方法注入 -->
<bean name="user" class="comzhicheng.domain.User" >
<property name="name" value="mimi"></property>
<property name="age" value="18"></property>
<property name="car" ref="car"></property>
</bean>
<bean name="car" class="com.zhicheng.domain.Car">
<property name="name" value="兰博基尼"></property>
<property name="color" value="黄色"></property>
</bean>
构造函数注入
配置构造
public User(String name, Car car) {
System.out.println("User(String name, Car car)");
this.name = name;
this.car = car;
}
<!-- 构造函数注入 -->
<bean name="user2" class="comzhicheng.domain.User">
<constructor-arg name="name" value="999" index="1" type="java.lang.Integer"></constructor-arg>
<constructor-arg name="car" ref="car" index="0"></constructor-arg>
</bean>
p名称注入(了解)
</bean>
<!-- p名称空间注入
1导入p名称空间 :xmlns:p="http://www.springframework.org/schema/p"
2使用p完成注入
值类型 p:属性名=值
对象类型p:属性名-ref="bean名称"
-->
<bean name="user3" class="com.zhicheng.domain.User" p:name="jack" p:age='20' p:car-ref="car"></bean>
Sepl方式注入(了解)(表达式语言)
<!-- sepl方式注入(表达式语言)-->
<bean name="user4" class="com.zhicheng.domain.User">
<property name="name" value="#{user.name}"></property>
<property name="age" value="#{user.age}"></property>
<property name="car" ref="car"></property>
</bean>
<bean name="car" class="com.zhicheng.domain.Car">
<property name="name" value="兰博基尼"></property>
<property name="color" value="黄色"></property>
</bean>
复杂类型注入
<bean name="cb" class="com.zhicheng.injection.CollectionBean">
<!-- 如果只有一个属性使用value
<property name="arr" value="tom"></property>
-->
<property name="arr">
<array>
<value>tom</value>
<value>vivi</value>
<ref bean="user4"/>
</array>
</property>
<property name="list">
<list>
<value>gg</value>
<value>mm</value>
<ref bean="user3"/>
</list>
</property>
<property name="map">
<map>
<entry key="url" value="jdbc:mysql:///crm"></entry>
<entry key="user4" value-ref="user4"></entry>
<entry key-ref="user3" value-ref="user2"></entry>
</map>
</property>
<property name="prop">
<props>
<prop key="user">root</prop>
<prop key="passwprd">123456</prop>
</props>
</property>
</bean>