跟随小破站学习java spring框架第四天

首先在项目中namespace导入p命名空间 可以方便定义对象属性

<bean id="s4" class="com.atguigu.spring.di.Student" p:id="10033" p:name="赵六" p:age="26" p:sex="女" p:teacher-ref="teacher">

</bean>

 

<bean id="s1" class="com.atguigu.spring.di.Student">
		<property name="id">
			<value>10010</value> //通过value标签进行赋值
		</property>
		<property name="name" value="张三"></property>
		<property name="age" value="23"></property>
		<property name="sex" value="男"></property>
	</bean>

ref关键字!

<bean id="s5" class="com.atguigu.spring.di.Student">
	<property name="id" value="10055"></property>
	<property name="name" value="张三三"></property>
	<property name="age" value="23"></property>
	<property name="sex" value="男"></property>
	<property name="teacher" ref="teacher"></property>//通过ref使用其他类的值
	<property name="teacher.tname" value="徐老师"></property>//通过修改标识 来进行值的修改
</bean>
	

	<bean id="teacher" class="com.atguigu.spring.di.Teacher">
		<property name="tid" value="10000"></property>
		<property name="tname" value="于老师"></property>
	</bean>

 

<bean id="s6" class="com.atguigu.spring.di.Student">
		<property name="id" value="10066"></property>
		<property name="name" value="崔八"></property>
		<property name="age" value="18"></property>
		<property name="sex" value="男"></property>
		<property name="teacher">
			<bean id="tt" class="com.atguigu.spring.di.Teacher">
				<property name="tid" value="222"></property>
				<property name="tname" value="黄老师"></property>				
			</bean>
		</property>
</bean>
	
	<!-- 定义在某个bean内部的bean,只能在当前bean中使用  -->
	<!-- <bean id="s7" class="com.atguigu.spring.di.Student">
		<property name="id" value="10066"></property>
		<property name="name" value="崔八"></property>
		<property name="age" value="18"></property>
		<property name="sex" value="男"></property>
		<property name="teacher" ref="tt"></property>
	</bean> -->

 

private List<String> cls;

<bean id="t1" class="com.atguigu.spring.di.Teacher">
		<property name="tid" value="10001"></property>
		<property name="tname" value="何老师"></property>
		<property name="cls">
			<list>
				<value>A</value>
				<value>B</value>
				<value>C</value>
			</list>
		</property>
</bean>


private List<Student> students; //注意命名格式 格式错误时无法赋值

<bean id="t2" class="com.atguigu.spring.di.Teacher">
		<property name="tid" value="10002"></property>
		<property name="tname" value="李老师"></property>
		<property name="students">
			<list>
				<ref bean="s1"/>
				<ref bean="s2"/>
				<ref bean="s3"/>
			</list>
		</property>
</bean>


private Map<String,String> bossMap; //map数组中一个entry代表一个"键 值"对

<bean id="t3" class="com.atguigu.spring.di.Teacher">
		<property name="tid" value="10003"></property>
		<property name="tname" value="admin"></property>
		<property name="bossMap">
			<map>
				<entry>
					<key>
						<value>10001</value>
					</key>
					<value>佟老师</value>
				</entry>
				<entry>
					<key>
						<value>10002</value>
					</key>
					<value>陈老师</value>
				</entry>
			</map>
		</property>
</bean>

private List<Student> students;

<bean id="t4" class="com.atguigu.spring.di.Teacher">
		<property name="tid" value="10004"></property>
		<property name="tname" value="root"></property>
		<property name="students" ref="s"></property>
</bean>
	
	<util:list id="s"> //此时的students指的是Student类的集合
		<ref bean="s4"/>
		<ref bean="s5"/>
		<ref bean="s6"/>
	</util:list>

//对于map集合也适用
<util:map id="map">
		<entry>
			<key>
				<value>1</value>
			</key>
			<value>张三</value>
		</entry>
</util:map>

注意:

出错原因:

<util:list id="s">
		<list>
			<ref bean="s4"/>
			<ref bean="s5"/>
			<ref bean="s6"/>
		</list>
</util:list>

//list中包含的是student对象的类 而不应该是一个集合

 

工厂bean FactoryBean

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 + "]";
	}
	
}


//实现工厂设计模式FactoryBean
public class MyFacory implements FactoryBean<Car> {

	//获取对象
	@Override
	public Car getObject() throws Exception {
		Car car = new Car();//工厂式创建对象
		car.setBrand("奥迪");
		car.setPrice(200000.0);
		return car;
	}

	//获取对象类型 所属类型
	@Override
	public Class<?> getObjectType() {
		return Car.class;
	}

	//是否为单例模式
	@Override
	public boolean isSingleton() {
		return false;
	}
}


<bean id="factory" class="com.atguigu.spring.factorybean.MyFacory"> </bean>


public class Test {

	public static void main(String[] args) {
		
		ApplicationContext ac = new ClassPathXmlApplicationContext("factory-bean.xml");
		Object object = ac.getBean("factory");
		System.out.println(object);//获取的是MyFactory下创建的car对象
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值