Bean实例化三种方法
标题无参构造方法(掌握)
就是之前学的那些
工厂静态方法实例化(了解)
在itheima包下写一个类StaticFactory,写上一个静态方法getUserDao
package com.itheima.factory;
import com.itheima.dao.UserDao;
import com.itheima.dao.impl.UserDaoImpl;
public class StaticFactory {
public static UserDao getUserDao(){
return new UserDaoImpl();
}
}
然后需要在Spirng容器中告诉bean,我们现在创建的不是无参构造器构造的对象了,而是通过类下的静态方法创建实例化
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--id叫什么名儿都行,然后后面的class跟上全类名-->
<bean id="userDao" class="com.itheima.factory.StaticFactory" factory-method="getUserDao" >
</bean>
</beans>
其中的factory-method属性就是静态方法实例化标志,后面的方法名即对应全类名下的相关的静态方法
工厂实例方法实例化(了解)
顾名思义,就是使用去掉了static之后的普通方法来创建工厂实例
先创建一个类
package com.itheima.factory;
import com.itheima.dao.UserDao;
import com.itheima.dao.impl.UserDaoImpl;
public class dynamicFactory {
public UserDao getUserDao(){
return new UserDaoImpl();
}
}
此时与上面不同,因为静态方法是在类初始化时就有的方法,它独属于类本身的成分而不是对象的成分,所以告诉Spring容器如何创建工厂实例的方法也不同。
我们的做法是,先创建一个工厂对象,即dynamicFactory的实例
再通过dynamicFatory的实例去调用这个创建实例的普通方法
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--id叫什么名儿都行,然后后面的class跟上全类名-->
<!--先创建dynamicFactory的工厂对象-->
<bean id="factory" class="com.itheima.factory.dynamicFactory"></bean>
<!--再创建该对象对应的返回给我们的方法-->
<bean id="UserDao" factory-bean="factory" factory-method="getUserDao"></bean>
</beans>