Spring 基于XML的DI

例如以下类:

teanDao是没有new的,所以直接用的时候会报空指针异常,所以再Spring自动创建该Service的时候要给teamDao注入,也就是赋值吧。

因为TeamDao这个对象是要用的,所以这个对象也是要创建的,但是要在创建TeamService的时候将该Service中的teamDao赋值让其使用。

除了通过构造方法注入属性值外,都需要service中有对应的set函数,来给对应的teamDao添加属性值。

java 复制代码
public class TeamService {
    private TeamDao teamDao;

    public TeamService() {
    }

    public TeamService(TeamDao teamDao) {
        this.teamDao = teamDao;
    }

    public void setTeamDao(TeamDao teamDao) {
        System.out.println("TeamService set teamDao" );
        this.teamDao = teamDao;
    }

    public void add() {
        teamDao.add();
        System.out.println("TeamService0---add");
    }
}

1、通过set方法

通过property标签可以将teamDao注入到service中的变量名为name值的变量,注入的就是ref对应的beanid。

前提是TeamService中set方法。

<bean id="teamDao" class="com.AE.dao.TeamDao"></bean>

<bean id="teamService" class="com.AE.service.TeamService" >

<!-- 1、使用set方法注入属性值 -->

<property name="teamDao" ref="teamDao"></property>

</bean>

2、通过构造方法

跟上一个是差不多的,只是实现方式不一样而已。

<bean id="teamDao" class="com.AE.dao.TeamDao"></bean>

<bean id="teamService1" class="com.AE.service.TeamService" >

<!-- 2、使用构造方法注入属性值 -->

<constructor-arg name="teamDao" ref="teamDao"></constructor-arg>

</bean>

3、自动注入

通过autowire属性进行设置。

前提是TeamService中set方法。

3.1、byName

就比如该service中定义使用的类名是teamDao,就会查找Spring创建的类中id对应的,就是根据定义名进行查找。

<bean id="teamDao" class="com.AE.dao.TeamDao"></bean>

<bean id="teamService2" class="com.AE.service.TeamService" autowire="byName">

<!-- 3.1、按名称自动注入 -->

</bean>

3.2、byType

跟byName差不多,区别是根据类型去查找的,即使创建对象的时候不是对应的teamDao,也可以使用,问题就是假如XML中有同时创建了两个类都是TeamDao,这时候通过类型去查找就会报错,因为有两个,spring不知道用哪个。

<bean id="teamDao" class="com.AE.dao.TeamDao"></bean>

<bean id="teamService3" class="com.AE.service.TeamService" autowire="byType">

<!-- 3.2、按类型自动注入 -->

</bean>

相关推荐
Nobody_Cares1 小时前
JWT令牌
java
沐浴露z1 小时前
Kafka入门:基础架构讲解,安装与使用
java·分布式·kafka
神秘的土鸡1 小时前
从数据仓库到数据中台再到数据飞轮:我的数据技术成长之路
java·服务器·aigc·数据库架构·1024程序员节
vir021 小时前
P1928 外星密码(dfs)
java·数据结构·算法·深度优先·1024程序员节
摇滚侠1 小时前
全面掌握PostgreSQL关系型数据库,备份和恢复,笔记46和笔记47
java·数据库·笔记·postgresql·1024程序员节
eguid_13 小时前
【开源项目分享】JNSM1.2.0,支持批量管理的jar包安装成Windows服务可视化工具,基于Java实现的支持批量管理已经安装服务的可视化工具
java·开源·jar·1024程序员节·windows服务·jar包安装成服务·exe安装成服务
杯莫停丶3 小时前
设计模式之:享元模式
java·设计模式·享元模式
遥远_3 小时前
Java微服务无损发布生产案例
java·spring·微服务·优雅停机·java微服务无损发布
苹果醋33 小时前
学习札记-Java8系列-1-Java8新特性简介&为什么要学习Java8
java·运维·spring boot·mysql·nginx
武子康4 小时前
Java-159 MongoDB 副本集容器化 10 分钟速查卡|keyfile + –auth + 幂等 init 附 docker-compose
java·数据库·mongodb·docker·性能优化·nosql·1024程序员节