Spring配置解析

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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值