- "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">
- <bean id="userService" class="com.example.Service.Impl.UserServiceImpl">
- <constructor-arg name="name" value="hahaha">constructor-arg>
- <property name="userDAO" ref="userDAO">property>
- bean>
- <bean id="userDAO" class="com.example.DAO.UserDAO">bean>
- beans>
- package com.example.Service.Impl;
-
- import com.example.DAO.UserDAO;
- import com.example.Service.UserService;
-
-
- public class UserServiceImpl implements UserService {
- // todo 无参构造方法
- public UserServiceImpl() {
- System.out.println("无参构造方法");
- }
-
- // todo 有参构造方法
- public UserServiceImpl(String name) {
- System.out.println("有参构造方法");
- System.out.println(name);
- }
-
- private UserDAO userDAO;
-
- public void setUserDAO(UserDAO userDAO) {
- }
-
- }
测试类运行结果
- package com.example.Test;
-
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- public class TestApplicationContext {
- public static void main(String[] args) {
- ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
- Object userService1 = context.getBean("userService");
- System.out.println(userService1);
- context.close();
-
- }
- }

- package com.example.Factory;
- import com.example.DAO.Impl.UserDAOImpl;
- import com.example.DAO.UserDAO;
-
- public class MyBeanFactory1 {
- public static UserDAO userDAO() {
- // todo 设置创建对象前的逻辑代码
- return new UserDAOImpl();
- // todo 设置创建对象后的逻辑代码
- }
- }
配置类中的关键代码
<bean id="userDAO1" class="com.example.Factory.MyBeanFactory1" factory-method="userDAO">bean>
设置userDAO1的bean对象,且是指定类中UserDAO方法返回值作为该bean对象,而不是指定的类
测试类
- package com.example.Test;
-
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- public class TestApplicationContext {
- public static void main(String[] args) {
- ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
- Object userDAO1 = context.getBean("userDAO1");
- System.out.println(userDAO1);
-
- }
- }
运行结果如下

-
-
"BeanFactory2" class="com.example.Factory.MyBeanFactory2"> -
-
"userDAO2" factory-bean="BeanFactory2" factory-method="userDAO">
- package com.example.Factory;
-
- import com.example.DAO.Impl.UserDAOImpl;
- import com.example.DAO.UserDAO;
- import org.springframework.beans.factory.FactoryBean;
-
- public class MyBeanFactory3 implements FactoryBean
{ -
- @Override
- public UserDAO getObject() throws Exception {
- return new UserDAOImpl();
- }
-
- @Override
- public Class> getObjectType() {
- return UserDAO.class;
- }
- }
<bean name="userDAO3" class="com.example.Factory.MyBeanFactory3">bean>
测试类
- package com.example.Test;
-
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- public class TestApplicationContext {
- public static void main(String[] args) {
- ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
- Object userDAO = context.getBean("userDAO3");
- System.out.println(userDAO);
-
- }
- }
在上述文章中,工厂类中的方法都是无参方法。
下面介绍工厂类中的方法为有参方法
- package com.example.Factory;
-
- import com.example.DAO.Impl.UserDAOImpl;
- import com.example.DAO.UserDAO;
-
- public class MyBeanFactory1 {
- public static UserDAO userDAO(String name) {
- System.out.println(name);
- return new UserDAOImpl();
- }
- }
- <bean id="userDAO1" class="com.example.Factory.MyBeanFactory1" factory-method="userDAO">
- <constructor-arg name="name" value="hkm">constructor-arg>
- bean>
依然使用的是
- package com.example.Test;
-
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- public class TestApplicationContext {
- public static void main(String[] args) {
- ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
- Object userDAO1 = context.getBean("userDAO1");
- System.out.println(userDAO1);
-
- }
- }
