Spring中的DI(依赖注入)

Spring中DI介绍

DI-Dependency Injection:依赖注入
bean对象中需要依赖一些其他组件或者对象,依赖关系由容器在运行时决定

两种方式处理依赖注入:
基于配置形式
基于注解形式

基于配置形式注入依赖

有参构造函数注入依赖

public class User {
    private String name;
    private UserInfo userInfo;

    public User(String name,UserInfo userInfo) {
        this.name = name;
        this.userInfo = userInfo;
    }
    <bean id="user"  class="com.tulun.Spring.IOC.ObjectUse.User">
        <!--
        通过有参构造函数实例
        constructor-arg:有参构造使用改标签
        name属性:表示是属性名
        value属性:属性赋值,给定字符串参数,给基本引用类型/基本类型赋值
        ref属性:属性赋值,给自定义对象赋值
        -->
        <constructor-arg name="userInfo" ref="userInfo"/>
        <constructor-arg name="name" value="大哥"/>
    </bean>

set方法注入依赖

public class User {
        private String name;

        public void setName(String name) {
            this.name = name;
        }
}

bean配置:

    <bean id="user1" class="com.tulun.Spring.IOC.ObjectUse.User">
        <property name="name" value="hello"/>
    </bean>

其他类型数据介绍

public class User {
        private String name;
        private UserInfo userInfo;
        //list类型
        private List<String> lists;
        //map类型
        private Map<String,String> maps;

        //set类型
        private Set<String>  sets;


    public void setUserInfo(UserInfo userInfo) {
        this.userInfo = userInfo;
    }

    public void setLists(List <String> lists) {
        this.lists = lists;
    }

    public void setMaps(Map <String, String> maps) {
        this.maps = maps;
    }

    public void setSets(Set <String> sets) {
        this.sets = sets;
    }
<property name="lists" >
            <!--list属性注入-->
            <list >
                <value>张三</value>
                <value>李四</value>
            </list>
        </property>
        <property name="maps">
            <!--map类型数据注入-->
            <map>
                <entry key="k1" value="k11"/>
                <entry key="k2" value="k22"/>
            </map>
        </property>
        <property name="sets">
            <!--set类型数据注入-->
            <set>
                <value>set1</value>
                <value>set2</value>
            </set>
        </property>

基于注解形式注入依赖

@Value() //注入普通类型属性
@Autowired 注入对象类型
@Resource 注入对象类型
都是在属性上添加

@Component
public class User {

        @Value("tulun") //针对普通类型的数据
        private String name;

        @Autowired  //注入对象类型
        @Resource  //注入对象类型
        private UserInfo userInfo;

问题:
//注入对象类型
@Autowired 和@Resource 异同点??
在这里插入图片描述
循环依赖的问题:
如果是使用构造函数的方式注入依赖,有可能会无法解决循环依赖的问题

解决问题:
对于会产生循环依赖的问题的这些类可以通过setter方法注入,可以解决循环依赖

DI使用Demo:
依赖注入:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过set方法赋值:
在这里插入图片描述
集合类型数据赋值:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值