spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。
实例工厂方法步骤如下:
定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂(xml)
定义实例工厂类
该类有实例方法返回所需bean,实例方法可以有参或无参。
package com.itheima.factory;import com.itheima.dao.interfaces.InterfaceUserDao;
import com.itheima.service.interfaces.InterfaceUserService;
import com.itheima.service.impl.UserServiceImpl02;/*** @copyright 2003-2024* @author qiao wei* @date 2024-12-24* @version 1.0* @brief 实例工厂方法返回Bean。* @history name* date* brief*/
public class MyBeanFactory02 {public InterfaceUserService getUserService() {return new UserServiceImpl02(userDao, 20);}public void setUserServiceA01(InterfaceUserDao userDao) {this.userDao = userDao;}public InterfaceUserDao getUserDaoABC(int value01, InterfaceUserDao userDao01) {
// System.out.println("Int:" + value01);return userDao01;}private InterfaceUserDao userDao;
}
方法getUserService和方法getUserDaoABC分别返回bean对象。
定义实例工厂(xml),定义调用实例工厂(xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.0.xsd"><!-- <bean id="userDaoInstance"-->
<!-- class="com.itheima.dao.impl.UserDaoImpl">-->
<!-- </bean>--><import resource="../dao/userDaoImpl.xml"/><!--实例工厂的实例方法(无参方法)返回第三方bean。1:定义Bean“myBeanFactoryA002”。工厂方法通过其它设置进行设置,随后将设置好的数据传递给工厂方法。2:定义实例工厂。该工厂绑定实例工厂类“myBeanFactoryA002”,调用无参实例方法“getUserService”返回Bean。--><bean id="myBeanFactoryA002"class="com.itheima.factory.MyBeanFactory02"></bean><bean id="getBeanWithoutParam"factory-bean="myBeanFactoryA002"factory-method="getUserService"></bean><!--实例工厂的实例方法(有参方法)返回第三方bean。1:factory-bean指定实例工厂类。2:factory-method指定工厂类的实例有参方法“getUserDaoABC”,该方法返回Bean。注:方法参数要按照方法中定义顺序赋值,改变顺序报错。--><bean id="getBeanWithParam"factory-bean="myBeanFactoryA002"factory-method="getUserDaoABC"><!-- 基本类型int参数 --><constructor-arg name="value01"value="100"></constructor-arg><!-- 引用类型"com.itheima.dao.impl.UserDaoImpl" --><constructor-arg name="userDao01"ref="userDaoImpl001"></constructor-arg></bean>
</beans>
可以看到,getBeanWithParam和getBeanWithoutParam都是通过调用实例工myBeanFactoryA002取得bean实例,不同之处只是一个方法无参,一个方法有参。