spring:xml定义bean

spring有两种方法定义bean,一种是使用xml标签,一种是注解。在这里介绍使用xml标签定义bean。

我的文件目录如上图所示,在这里创建了bean.xml文件,bean.xml文件中定义了bean。

文件内容:

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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <!-- 定义bean。设置属性property,绑定对应的方法"setUserDaoTest" -->
    <bean id="userService01" class="com.itheima.service.impl.UserServiceImpl">
        <!-- 属性property表示bean中的方法。
             字段name绑定bean中的方法setUserDaoTest,注意字段name的值是"删除set的UserDaoTest",格式为"userDao"。
             第一个字符必须小写,其余不变。
             字段ref绑定bean。值是bean的字段id值,即bean"com.itheima.dao.impl.UserDaoImpl"。
         -->
        <property name="userDaoTest" ref="userDao"></property>
    </bean>
    
    <!-- 字段name是bean的别名,功能类似字段id。其余bean可以通过id、name获取该bean。注意id的优先级高于name。 -->
    <bean id="userDao"
          name="aaa,bbb"
          class="com.itheima.dao.impl.UserDaoImpl">
    </bean>
</beans>

文件中定义了2个bean,一个是"com.itheima.dao.impl.UserDaoImpl",通过字段id"userDao"调用;一个是"com.itheima.service.impl.UserServiceImpl",通过字段id"userService"调用。

bean"userDao"

测试代码:

java 复制代码
package com.itheima.test;


import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;

import com.itheima.dao.UserDao;
import com.itheima.service.UserService;


/**
 * @copyright 2003-2024
 * @author    qiao wei
 * @date      2024-07-09
 * @version   1.0
 * @brief     
 * @history   name
 *            date
 *            brief
 */
public class BeanFactoryTest {

  public static void main(String[] args) {
    /**
     * 1:创建工厂对象
     * 2:创建读取器,读取xml文件。
     * 3:读取配置文件,传递给工厂。
     * 4:根据id获取Bean对象。
     */
    DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
    XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
    reader.loadBeanDefinitions("beans.xml");

    UserService userService = (UserService) beanFactory.getBean("userService01");
    System.out.println(userService);

    UserDao userDao = (UserDao) beanFactory.getBean("userDao");
    System.out.println(userDao);
  }
}

使用方法getBean,通过bean的字段id获取实例对象。注意bean实例userDao和userService01的定义区别,userService01通过属性property绑定方法setUserDaoTest,方法参数为UserDao实例。userDao没有设置属性property,没有绑定方法。

接口UserDao:

java 复制代码
package com.itheima.dao;

/**
 * @copyright 2003-2024
 * @author    qiao wei
 * @date      2024-07-16
 * @version   1.0
 * @brief     
 * @history   name
 *            date
 *            brief
 */
public interface UserDao {
}

接口UserService:

java 复制代码
package com.itheima.service;

/**
 * @copyright 2003-2024
 * @author    qiao wei
 * @date      2024-07-05
 * @version   1.0
 * @brief     
 * @history   name
 *            date
 *            brief
 */
public interface UserService {
  
}

实现类UserServiceImpl:

java 复制代码
package com.itheima.service.impl;


import org.springframework.beans.factory.InitializingBean;

import com.itheima.dao.UserDao;
import com.itheima.service.UserService;


/**
 * @copyright 2003-2024
 * @author    qiao wei
 * @date      2024-07-09
 * @version   1.0
 * @brief     
 * @history   name
 *            date
 *            brief
 */
public class UserServiceImpl implements UserService {
  
  public UserServiceImpl() {
    System.out.println("=============调用UserServiceImpl构造函数================");
  }
  
  /**
   * @author  qiao wei
   * @brief   传入接口UserDao实例。该方法与xml中bean中的property的字段name绑定,绑定时去掉"set","UserDaoTest"首字
   *          母"U"改成小写"u"。
   * @param   
   * @return  
   * @throws  
   * @history name
   *          date
   *          brief
   */
  public void setUserDaoTest(UserDao userDao) {
    System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@调用方法setUserDaoTest");
    System.out.println(userDao);
  }
  
  public void setUserDao111(UserDao userDao) {
    System.out.println("调用方法setUserDao111>>>>>>>>>>>>>>>>>>>>>>>>>>");
    System.out.println(userDao);
  }
}

运行结果如下:

XML 复制代码
实例化UserDaoImpl$$$$$$$$$$$$$$$$$$$$$$$$
com.itheima.dao.impl.UserDaoImpl@6f195bc3

接口UserService:

java 复制代码
package com.itheima.service;

/**
 * @copyright 2003-2024
 * @author    qiao wei
 * @date      2024-07-05
 * @version   1.0
 * @brief     
 * @history   name
 *            date
 *            brief
 */
public interface UserService {
  
}

接口UserService实现,UserServiceImpl:

java 复制代码
package com.itheima.service.impl;


import com.itheima.dao.UserDao;
import com.itheima.service.UserService;


/**
 * @copyright 2003-2024
 * @author    qiao wei
 * @date      2024-07-09
 * @version   1.0
 * @brief     
 * @history   name
 *            date
 *            brief
 */
public class UserServiceImpl implements UserService {
  
  public UserServiceImpl() {
    System.out.println("=============调用UserServiceImpl构造函数================");
  }
  
  /**
   * @author  qiao wei
   * @brief   传入接口UserDao实例。该方法与xml中bean中的property的字段name绑定,绑定时去掉"set","UserDaoTest"首字
   *          母"U"改成小写"u"。
   * @param   
   * @return  
   * @throws  
   * @history name
   *          date
   *          brief
   */
  public void setUserDaoTest(UserDao userDao) {
    System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@调用方法setUserDaoTest");
    System.out.println(userDao);
  }
  
  public void setUserDao111(UserDao userDao) {
    System.out.println("调用方法setUserDao111>>>>>>>>>>>>>>>>>>>>>>>>>>");
    System.out.println(userDao);
  }
}

运行结果:

XML 复制代码
=============调用UserServiceImpl构造函数================
实例化UserDaoImpl$$$$$$$$$$$$$$$$$$$$$$$$
@@@@@@@@@@@@@@@@@@@@@@@@@调用方法setUserDaoTest
com.itheima.dao.impl.UserDaoImpl@de3a06f
com.itheima.service.impl.UserServiceImpl@76b10754
相关推荐
颜如玉11 分钟前
🤲🏻🤲🏻🤲🏻临时重定向一定要能重定向🤲🏻🤲🏻🤲🏻
java·http·源码
程序员的世界你不懂1 小时前
【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇
java·前端·数据库
星空寻流年1 小时前
设计模式第一章(建造者模式)
java·设计模式·建造者模式
gb42152872 小时前
java中将租户ID包装为JSQLParser的StringValue表达式对象,JSQLParser指的是?
java·开发语言·python
曾经的三心草2 小时前
Python2-工具安装使用-anaconda-jupyter-PyCharm-Matplotlib
android·java·服务器
Metaphor6922 小时前
Java 高效处理 Word 文档:查找并替换文本的全面指南
java·经验分享·word
ChinaRainbowSea3 小时前
7. LangChain4j + 记忆缓存详细说明
java·数据库·redis·后端·缓存·langchain·ai编程
stormsha3 小时前
飞算JavaAI炫技赛电商系统商品管理模块的架构设计与实现
java·架构·鸿蒙系统
minh_coo3 小时前
Spring框架事件驱动架构核心注解之@EventListener
java·后端·spring·架构·intellij-idea
翻滚丷大头鱼3 小时前
Java 集合Collection—List
java·开发语言