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()方法,配置 与普通方法一样