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
相关推荐
R-sz4 分钟前
app登录接口实现,基于JWT的APP登录认证系统实现方案
java·开发语言·python
无籽西瓜a10 分钟前
ArrayList和LinkedList的区别
java
Elieal14 分钟前
@Api 系列注解
java·开发语言
Remember_99315 分钟前
【数据结构】深入理解Map和Set:从搜索树到哈希表的完整解析
java·开发语言·数据结构·算法·leetcode·哈希算法·散列表
小楼v16 分钟前
消息队列的核心概念与应用(RabbitMQ快速入门)
java·后端·消息队列·rabbitmq·死信队列·交换机·安装步骤
小北方城市网21 分钟前
接口性能优化实战:从秒级到毫秒级
java·spring boot·redis·后端·python·性能优化
小北方城市网23 分钟前
Redis 缓存设计与避坑实战:解决穿透 / 击穿 / 雪崩
java·大数据·数据库·redis·python·elasticsearch·缓存
jiayong2323 分钟前
MINA框架面试题 - 进阶篇
java·io·mina
鸡蛋豆腐仙子29 分钟前
Spring的AOP失效场景
java·后端·spring