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
相关推荐
TAEHENGV3 分钟前
基本设置模块 Cordova 与 OpenHarmony 混合开发实战
android·java·数据库
千寻技术帮13 分钟前
10422_基于Springboot的教务管理系统
java·spring boot·后端·vue·教务管理
milanleon22 分钟前
使用Spring Security进行登录认证
java·前端·spring
毕设源码-朱学姐26 分钟前
【开题答辩全过程】以 三叶草中石油信息管理系统的设计与实现为例,包含答辩的问题和答案
java·eclipse
期待のcode1 小时前
@RequestBody的伪表单提交场景
java·前端·vue.js·后端
气π1 小时前
【JavaWeb】——(若依+AI)-帝可得实践项目
java·spring
乌暮2 小时前
JavaEE初阶--多线程案例
java·java-ee
小光学长2 小时前
基于ssm旅游管理系统的开发与设计z050cft7(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·数据库·旅游
用户3521802454752 小时前
🥯2025 年终极避坑指南:Spring Boot 2.7 + 3.2 混合集群的 Redis + OAuth2 序列化血泪史
java·后端·spring cloud