首页 > 其他分享 >6、Spring之基于xml的自动装配

6、Spring之基于xml的自动装配

时间:2023-08-05 14:11:23浏览次数:35  
标签:xml 装配 Spring void rain saveUser spring org public

6.1、场景模拟

6.1.1、创建UserDao接口及实现类

image

package org.rain.spring.dao;

/**
 * @author liaojy
 * @date 2023/8/5 - 11:05
 */
public interface UserDao {

    void saveUser();

}

image

package org.rain.spring.dao.impl;

import org.rain.spring.dao.UserDao;

/**
 * @author liaojy
 * @date 2023/8/5 - 11:08
 */
public class UserDaoImpl implements UserDao {

    public void saveUser() {
        System.out.println("保存成功");
    }

}

6.1.2、创建UserService接口及实现类

image

package org.rain.spring.service;

/**
 * @author liaojy
 * @date 2023/8/5 - 11:10
 */
public interface UserService {

    void saveUser();

}

image

package org.rain.spring.service.impl;

import org.rain.spring.dao.UserDao;
import org.rain.spring.service.UserService;

/**
 * @author liaojy
 * @date 2023/8/5 - 11:23
 */
public class UserServiceImpl implements UserService {

    private UserDao userDao;

    public UserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void saveUser() {
        userDao.saveUser();
    }
}

6.1.3、创建UserController

image

package org.rain.spring.controller;

import org.rain.spring.service.UserService;

/**
 * @author liaojy
 * @date 2023/8/5 - 11:32
 */
public class UserController {

    private UserService userService;

    public UserService getUserService() {
        return userService;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public void saveUser(){
        userService.saveUser();
    }
}

6.1.4、配置bean

image

<?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 id="userDao" class="org.rain.spring.dao.impl.UserDaoImpl"></bean>

    <bean id="userService" class="org.rain.spring.service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"></property>
    </bean>

    <bean id="userController" class="org.rain.spring.controller.UserController">
        <property name="userService" ref="userService"></property>
    </bean>

</beans>

6.1.5、测试

image

    @Test
    public void testAutoWireByXML(){
        ApplicationContext ioc = new ClassPathXmlApplicationContext("spring-autowire.xml");
        UserController userController = ioc.getBean(UserController.class);
        userController.saveUser();
    }

6.2、两种自动装配方式

6.2.1、方式一:byType(常用)

6.2.1.1、配置bean

image

注意:
若在IOC中,没有任何一个兼容类型的bean能够为属性赋值,则该属性不装配,即值为默认值null
若在IOC中,有多个兼容类型的bean能够为属性赋值,则抛出异常NoUniqueBeanDefinitionException

    <bean id="userDao" class="org.rain.spring.dao.impl.UserDaoImpl"></bean>

    <!--
        autowire属性:指定自动装配的策略,为bean的类类型(或接口类型)的属性自动赋值
            byType:根据要赋值的属性的类型,匹配ioc容器中的兼容类型的bean,为属性赋值
    -->
    <bean id="userService" class="org.rain.spring.service.impl.UserServiceImpl" autowire="byType"></bean>

    <bean id="userController" class="org.rain.spring.controller.UserController" autowire="byType"></bean>

6.2.1.2、测试

image

6.2.2、方式二:byName(后备)

6.2.2.1、配置bean

image

当在IOC中,有多个兼容类型的bean能够为属性赋值时;可以使用byName的方式,匹配id和属性名相同的bean为属性赋值

    <bean id="userDao" class="org.rain.spring.dao.impl.UserDaoImpl"></bean>

    <bean id="userDaotwo" class="org.rain.spring.dao.impl.UserDaoImpl"></bean>

    <!--
        autowire属性:指定自动装配的策略,为bean的类类型(或接口类型)的属性自动赋值
            byName:根据要赋值的属性的名称,匹配ioc容器中的对应id的bean,为属性赋值
    -->
    <bean id="userService" class="org.rain.spring.service.impl.UserServiceImpl" autowire="byName"></bean>

标签:xml,装配,Spring,void,rain,saveUser,spring,org,public
From: https://www.cnblogs.com/Javaer1995/p/17607659.html

相关文章

  • vb.net Linq XML Xdocument Descendants 为空
    在使用xdocumentdesendants进行筛选元素时,发现结果为空 经过网友的文章提醒发现是命名空间的问题在使用linqwhere进行网页元素筛选时发现descendants("div")不起作用,而是用descendatns可以看到元素枚举DimieAsIEnumerable(OfXElement)=ex1.Descendant......
  • Spring Cloud 笔记
    单体应用存在的问题随着业务的发展,开发变得越来越复杂。修改、新增某个功能,需要对整个系统进行测试、重新部署。一个模块出现问题,很可能导致整个系统崩溃。多个开发团队同时对数据进行管理,容易产生安全漏洞。各个模块使用同一种技术进行开发,各个模块很难根据实际情况选择更......
  • 【Spring Boot 丨类型安全配置属性 】
    本篇来讲一讲外部化配置类型安全属性(类型安全配置属性)类型安全配置属性  使用@Value("${property}")注释来注入配置属性有时可能很麻烦,尤其是处理多个属性或您的数据本质上是层次结构的情况下。SpringBoot提供了另一种使用属性的方法,让强类型bean管理和验证应用程......
  • Springboot 3.x 集成Knife4j [踩坑日记]
    之前项目用的是SpringBoot2.x新项目用了SpringBoot3.x版本,引入Knife4j报错java.lang.TypeNotPresentException:Typejavax.servlet.http.HttpServletRequestnotpresent,以为是servlet的原因,更新了Servlet的版本,依旧报错,几番周折找到找到了在SpringBoot3中集成Knife......
  • Spring Boot 数据库连接池性能优化
    当涉及到SpringBoot中的性能优化时,连接池是一个非常重要的话题。连接池在数据库访问和其他外部资源访问中扮演着关键角色,可以显著提升应用程序的性能和资源利用率。在本文中,我们将深入探讨如何在SpringBoot应用中优化数据库连接池的配置,从而提升应用性能。数据库连接池是管理......
  • Spring Boot 微服务架构中的服务发现和注册
    当涉及到SpringBoot中的微服务架构时,服务发现和注册是一个至关重要的话题。在微服务架构中,各个服务需要相互通信,而服务发现和注册机制则允许服务动态地发现和定位其他服务,从而实现更好的弹性和可扩展性。在本文中,我们将深入探讨如何在SpringBoot中实现服务发现和注册,以及如何......
  • Spring Boot 中的 AOP 实践
    在SpringBoot中使用AOP(面向切面编程)可以帮助您在应用程序中更优雅地处理横切关注点,如日志、事务管理和安全性。本文将深入探讨如何在SpringBoot中使用AOP,以及如何创建自定义切面来实现特定功能。1.什么是AOP?AOP是一种编程范式,它允许您将横切关注点(如日志、安全性、事务......
  • Spring Boot 中的缓存优化
    在SpringBoot中使用缓存可以显著提升应用程序的性能和响应时间。通过合理地配置缓存,可以减少对数据库或其他外部资源的频繁访问,从而提升系统的吞吐量和性能。本文将深入探讨如何在SpringBoot中使用缓存,以及如何优化缓存配置以获得最佳性能。1.为什么使用缓存?使用缓存可以将......
  • Spring Boot 中的数据库连接池
    在SpringBoot中,使用数据库连接池是优化应用性能和资源利用的重要手段。数据库连接池允许应用程序重复使用预先创建的数据库连接,避免了频繁地创建和关闭连接,从而提升了数据库访问的效率。本文将深入探讨在SpringBoot中使用数据库连接池的优势和配置方法。1.数据库连接池的优......
  • springboot 关于servlet容器配置修改 组件注册 容器切换 使用外部tomcat
    1.嵌入式Servlet容器配置修改1.通过全局配置文件修改可以通过server.xxx来进行web服务配置,没有带服务器名称的则是通用配置通过带了具体的服务器名称则是单独对该服务器进行设置,比如server.tomcat.xxx就是专门针对tomcat的配置2.通过WebServerFactoryCus......