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()方法,配置
与普通方法一样
Spring 知识基础总结
最新推荐文章于 2023-04-18 23:15:54 发布