Spring的依赖注入(DI)

1.什么是依赖注入

Spring中的IOC是创建对象,但是这个对象是没有初值的。那么要怎么为对象赋初值呢?

Spring中的依赖注入DI就解决了这个问题。

详细概念请参考百度百科--->依赖注入

2.依赖注入的类型有哪些?

基本数据类型, 字符串类型,引用类型,集合类型。

3.如何实现对象属性值的注入?

(1)首先需要有一个类供spring容器创建对象,同时这个类要求有set()方法

可以通过lombok插件,使用注解完成get、set方法和构造方法的自动生成

@Data
@NoArgsConstructor
@AllArgsConstructor
public class People {

    private String name;
    private int age;
    private IDCard idCard;
    private List<String> hobby;
    private String[] sex;
    private Set<String> set;
    private Map<String,String> map;
    public void show(){
        System.out.println("-----------");
    }
}

当然也可以自己编写get、set方法。

(2)在spring配置文件中的<bean></bean>标签内编写属性值(基本类型属性的赋值)

<?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">


    <!--spring容器会帮你创建该bean的对象-->
    <bean id="student01" class="com.zjw.demo.People">
        <!--property:表示为类中属性注入值,调用的为set方法
                name:表示属性名
                value:注入基本类和字符串类型时使用value
        -->
        <property name="name" value="张三"/>
        <property name="age" value="15"/>
    </bean>
</beans>

(3)引用类型的属性赋值

list集合属性注入

        <property name="hobby">
            <list>
                <value>打游戏</value>
                <value>打篮球</value>
                <value>看美女</value>
            </list>
        </property>

数组类型属性注入

        <property name="sex">
            <array>
                <value>男</value>
                <value>女</value>
                <value>未知</value>
            </array>
        </property>

map类型属性注入

        <property name="map">
            <map>
                <entry key="name" value="神里"/>
                <entry key="age" value="23"/>
                <entry key="sex" value="女"/>
            </map>
        </property>

set类型属性注入

        <property name="set">
            <set>
                <value>蒙德</value>
                <value>稻妻</value>
                <value>璃玥</value>
                <value>须弥</value>
            </set>
        </property>

对象类型属性注入

<!--此处的值不再使用value了,而是ref表示引用某个对象的id-->
<property name="idCard" ref="idcard01"/>

<!--被引用的对象,也要交予spring容器进行创建-->
<bean id="idcard01" class="com.zjw.demo.IDCard">
    <property name="idNum" value="100001"/>
</bean>

4.自动注入

除了通过以上配置文件,spring也可以实现自动注入。

(这句话可能有问题,毕竟我还很菜,这个是我自己的理解)这个注入主要针对于对象类型的属性,对于基本类型和set、list等类型而言,注入的也是默认值,与不注入没什么区别。

这两种属性值是最常用的属性值,更多的关于autowire属性值的内容请参考autowire属性

<!--
        通过autowire属性可以实现自动注入,
        autowire属性值有:
                no:不自动注入;
                byname:通过名字自动注入
                bytype:通过类型自动注入
                
    -->

    <bean id="user" class="com.zjw.dao03.User" autowire="byType">

    </bean>

    <bean id="idcard01" class="com.zjw.dao03.IDCard">
        <property name="idNum" value="100001"/>
    </bean>

5.使用注解完成IOC和DI功能

(1)配置包扫描

<context:component-scan base-package="com.zjw"/>

(2)创建controller

@Controller
public class UserController {

    @Autowired //该注解默认按类型自动注入,如需指定,则需要配合Qualifier注解使用
    @Qualifier(value = "userDao")
    private IUserService userDao;

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

(3)service接口和dao实现类

@Service
public interface IUserService {
     void show();
}



@Repository
public class UserDao implements IUserService {

    public void show(){
        System.out.println("userDao的show方法!");
    }

}

以上就是通过注解的方式实现了IOC以及DI

注意:

@Controller、@Respository、@Service、@Component
没有区别: 他们的底层都是用的@Component
实际意思就在于区分层的。
@Controller控制层
@Respository持久化层
@Service 业务层
@Component 最底层的bean注解。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值