实例化Bean的方式有三种,分别为:
- 使用构造方法实例化
- 使用静态工厂方法实例化
- 使用实例工厂方法实例化
接下来分别对它们进行举例说明。
1. 使用set方法实例化
<!-- 第一种方式:配置一个bean,其实就是new一个实现类 -->
<bean id="userService" class="com.ahua.service.UserServiceImpl">
<!-- 依赖注入数据,调用属性的set方法 -->
<property name="name" value="zhangsan"/>
</bean>
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//new实现类
IUserService userService = (IUserService)context.getBean("userService");
userService.add();
System.out.println(userService);
2. 使用静态工厂方法实例化
首先创建一个静态工厂
package com.ahua.factory;
import com.ahua.service.IUserService;
import com.ahua.service.UserServiceImpl;
public class UserServiceFactory1 {
public static IUserService createUserService(String name) {
if (name.equalsIgnoreCase("zhangsan")) {
return new UserServiceImpl();
}
return null;
}
}
再在bean.xml中进行配置,利用<constructor-arg>
进行传参,利用<property>
来对参数进行注入。
<bean id="userService2" class="com.ahua.factory.UserServiceFactory1" factory-method="createUserService">
<constructor-arg value="zhangsan"></constructor-arg>
<property name="name" value="lisi"></property>
</bean>
在测试类中进行测试:
IUserService userService2 = (IUserService) context.getBean("userService2", IUserService.class);
userService2.add();
System.out.println(userService2);
得到的结果为:
3. 使用实例工厂方法实例化
创建一个工厂:
package com.ahua.factory;
import com.ahua.service.IUserService;
import com.ahua.service.UserServiceImpl;
public class UserServiceFactory2 {
public IUserService createUserService() {
return new UserServiceImpl();
}
}
在bean.xml中进行配置,实例工厂:
<bean id="factory2" class="com.ahua.factory.UserServiceFactory2"></bean>
<bean id="userService3" factory-bean="factory2" factory-method="createUserService"></bean>
在测试类中进行测试:
IUserService userService3 = (IUserService) context.getBean("userService3");
userService3.add();
具体代码见我的GitHub:戳这里