Spring注入方式

settter注入,分为两种引用类型和简单类型

<?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 = "bookdao" class="dao.impl.bookdaoimpl" >
        <property name="age" value="13"/>
        <property name="name" value="zhangpeng"/>
    </bean>
    <bean  id = "usedao" class="dao.impl.userdaoimpl" />

    
    <bean  id = "bookservice" class="service.impl.bookserviceimpl" >
        <!--        注意ref对应上面dao层配置bean的id,name对应创建属性的变量名-->
    <property name="bookdao" ref="bookdao"/>
    <property name="userdao" ref="usedao"/>


    </bean>

</beans>

配置文件设置如上图所示,

<有一点你要注意,在那个bean写的配置信息你就跑哪个impl实现类里面去改>

我就是引用放在service层里面,简单放dao层里面

package service.impl;

import dao.bookdao;
import dao.userdao;
import service.bookservice;

public class bookserviceimpl implements bookservice {
    private bookdao bookdao;
    private userdao userdao;


    public void setUserdao(dao.userdao userdao) {
        this.userdao = userdao;
    }

    public void setBookdao(bookdao bookdao) {
        this.bookdao = bookdao;
    }

    public void real() {
        System.out.println("book  service  save.....");
        bookdao.save();
        userdao.save();
    }


}

这里我设置两个接口属性测试是否可以多开,结果是的

引用数据类型要求

        1.就是在bean中定义引用类型属性并提供可以访问的set方法

        2.配置里面用property标签注入引用的类型对象,注意name和ref分别对应哪里

public class bookdaoimpl implements bookdao {
    private int age;
    private String name;

    public void setAge(int age) {
        this.age = age;
    }

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

    @Override
    public void save() {
        System.out.println("book dao save...."+name+age);

    }

}

简单数据类型要求

        1.就是在bean中定义简单类型属性并提供可以访问的set方法

        2.配置里面用property标签注入简单数据类型对象,注意name和value的用法!

构造器注入,同样引用和简单数据两种类型

<?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 = "bookdao" class="com.zp.dao.impl.bookdaoimpl" >
        <constructor-arg name="name" value="zhangpeng"/>
        <constructor-arg name="age" value="18"/>
    </bean>

    <bean  id = "userdao" class="com.zp.dao.impl.userdaoimpl" />


    <bean  id = "bookservice" class="com.zp.service.impl.bookserviceimpl" >
        <constructor-arg name="bookdao1" ref="bookdao"/>
        <constructor-arg name="userdao1" ref="userdao"/>

<!--        注意此处的name与实现类中的形参变量高度耦合。有的视情况而定可以用type=“int”代替name,或者是index=“0”这种,不过一般都不太好-->
    </bean>

</beans>

与setter注入是xml文件配置不同的是换成了constructor-arg,并且注意这里name和之前不一样是实现类的形参,其他是一样

public class bookdaoimpl implements bookdao {
    private int age;
    private String name;

    public bookdaoimpl(int age, String name) {
        this.age = age;
        this.name = name;
    }

    @Override
    public void save() {
        System.out.println("book dao save...."+age+","+name);

    }

}
public class bookserviceimpl implements bookservice {
    private bookdao bookdao;
    private userdao userdao;

    public bookserviceimpl(com.zp.dao.bookdao bookdao1, com.zp.dao.userdao userdao1) {
        this.bookdao = bookdao1;
        this.userdao = userdao1;
    }

    public void real() {
        System.out.println("book  service  save.....");
        bookdao.save();
        userdao.save();
    }


}

两个实现类呢也是采用了构造方法,没用setter方法

总结

构造器注入多用于强制依赖的注入,setter用于可选依赖的注入

<受控对象没有setter方法,只能用构造器注入>

自己用的话还是setter注入吧,构造器有缺点不好用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值