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
相关推荐
ScriptBIN2 分钟前
管理和构建Java项目的工具--Maven
java·maven
全职计算机毕业设计9 分钟前
基于SpringBoot框架的在线教育系统设计与实现(三套文档参考)
java·spring boot·后端
No8g攻城狮17 分钟前
【异常解决】使用DateUtil.isSameDay()方法判断秒级时间戳是否属于同一天踩过的坑
java·jvm·spring boot·java-ee·springboot
再睡一夏就好22 分钟前
【C++闯关笔记】深究继承
java·数据结构·c++·stl·学习笔记
天若有情67343 分钟前
TFword:从字符到片段,解析一个“小而精”的字符串处理工具的设计智慧
java·jvm·算法
那我掉的头发算什么1 小时前
【数据结构】反射、枚举、lambda表达式以及补充知识
java·jvm·数据结构·intellij idea
Hello.Reader1 小时前
在 Flink 中用好 Java 8 Lambda类型推断、`.returns(...)` 与常见坑位
java·python·flink
滑水滑成滑头1 小时前
**发散创新:模拟计算的高级应用与实现**随着科技的飞速发展,模拟计算已经成为了众多领域的核心工
java·服务器·python·科技
peiwang2451 小时前
Linux系统中CoreDump的生成与调试
java·linux·开发语言
顾漂亮1 小时前
Redis深度探索
java·redis·后端·spring·缓存