现在的位置: 首页 > 综合 > 正文

Spring 知识基础总结

2017年12月26日 ⁄ 综合 ⁄ 共 3575字 ⁄ 字号 评论关闭
Spring 总结
创建Bean的三种方式:
	1.直接使用new 的方式
		//相当于  person = new Person();
		<bean id="person" class="com.sharp.bean.Person" />
	2.通过静态工厂方法:
		/**
		 * 相当于如下代码:
		 * public class StaticFactory {
		 *		public static Date obtainDate(){
		 *			Calendar calendar = Calendar.getInstance();
		 *			calendar.add(Calendar.MONTH, -7);
		 *			return calendar.getTime();
		 *		}
		 *	}
		 */
		<bean id="da" class="com.sharp.beans.StaticFactory" factory-method="obtainDate"/>
	3.通过实例工厂方法:
		/**
		 * 相当于如下代码:
		 * public class InsatanceFactory {
		 *		public Date obtainDate(String io, String key){
		 *			Calendar calendar = Calendar.getInstance();
		 *			System.out.println("io ~~~~~~~~~~~~~" + io);
		 *			System.out.println("key ~~~~~~~~~~~~~" + key);
		 *			calendar.add(Calendar.MONTH, +2);
		 *			return calendar.getTime();
		 *		}
		 *	}
		 */
			<bean id="instanceda" factory-bean="fac" factory-method="obtainDate">
				<constructor-arg name="key" value="mykey"/>
				<constructor-arg name="io" value="myio"/>
			</bean>
			<bean id="fac" class="com.sharp.beans.InsatanceFactory">
				<constructor-arg value="sharp"/>
			</bean>
初始化:
	使用无参构造创建一个类的实例


		//相当于  person = new Person();
		<bean id="person" class="com.sharp.bean.Person" />

	使用有参构造创建一个类的实例


		//相当于  person = new Person("sharp",30);
		<bean id="person" class="com.sharp.bean.Person">
			<constructor-arg name="name" value="sharp"/>
			<constructor-arg name="age" value="30"/>
		</bean>
			
	实例化一个抽象类
		/*
			public abstract class Person{
				public abstract Dog createDog();
			}
			public class Dog{
				private String name;
				...
			}

		*/
		<bean id="person" class="com.sharp.bean.Person">
			<lookup-method name="createDog" bean="dog"/>
		</bean>

		<bean id="dog" class="com.sharp.bean.Dog" scope="prototype"/>

调用成员变量:
	静态成员变量:
		<util:constant id="pro" static-field="com.sharp.Person.Str"/>
	非静态成员变量:
		<bean id="person" class="com.sharp.Person"/>
		<bean id="wel" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"
			p:targetObject-ref="person" p:targetField="name"
		/>

调用方法:

	setter/getter:

		调用一个类的属性的set方法

			//	person = new Person();
			//	person.setName("sharp");
			//	person.setAge(30);
			<bean id="person" class="com.sharp.bean.Person" p:name="sharp" p:age="30"/>

		调用一个类的属性的get方法


			<bean id="person" class="com.sharp.bean.Person" />
			//	相当于  person.getName();   必须是标准的get方法
			<util:property-path path="person.name" id="personName"/>
	工厂方法:

		调用一个类的静态工厂方法

			<bean id="person" class="com.sharp.bean.Person" factory-method="静态方法名"/>



		调用一个对象的非静态工厂方法
			方法1:
				<!-- 
					如果没有factory-method属性,直接调用有参或无参的构造器。
					如果有factory-method属性,表明指定了工厂方法,此时就不再调用构造器。
					如果有factory-bean属性,表明调用实例工厂方法
					
					userDao = userDaoFactory.getUserDao()
				 -->
				<bean id="userDao"
					factory-bean="userDaoFactory"
					factory-method="instanceUserDao">
					<constructor-arg value="hibernate"/>	//方法的传参
				</bean>
				
				<!-- 配置工厂Bean,与配置其他普通的Bean完全相同。 -->
				<bean id="userDaoFactory" class="org.fkjava.spring.dao.UserDaoFactory"/>
			方法2:
				<!--
				jf.add(new JButton("单击我"));
				 -->
				<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"
					p:targetObject-ref="jf"
					p:targetMethod="add">
					<property name="arguments">
						<list>
							<bean class="javax.swing.JButton">
								<constructor-arg value="单击我"/>
							</bean>
						</list>
					</property>
				</bean>
			
	非工厂方法:
		调用静态方法:
			<bean id="method2" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"
				p:staticMethod="com.sharp.Person.helloY">
				<property name="arguments" value="pengpeng"/>
			</bean>
			
		调用非静态方法:
			<bean id="method" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"
				p:targetObject-ref="person" p:targetMethod="helloM">
				<property name="arguments">
					<list>
						<value>pengpeng</value>
					</list>
				</property>
			</bean>
	

工厂相关:

	方法一: 在<bean 里面设置factory-method 属性为静态方法名,会调用该类的静态方法
		eg:<bean id="factory" class="com.sharp.factory.MyTest" factory-method="静态方法名">
		
	方法二:在<bean 里面设置factory-method 和factory-bean属性,会调用该对象的实例方法
		eg: <bean id="person" class="com.sharp.factory.Person">
		eg:<bean id="factory" factory-bean="person(实例名)" factory-method="实例方法名">
	方法三:实现factorybean接口,并重写getObject()/getObjectType()/getSimpleton()方法,配置
		与普通方法一样

抱歉!评论已关闭.