spring 用于注入数据的注解

本文介绍了Spring框架中用于注入数据的注解,包括@Autowired、@Qualifier和@Resource。@Autowired按类型自动注入,可选配required=false防止找不到对象时抛错;@Qualifier结合使用可按bean ID注入;@Resource则优先尝试按name属性装配,其次按byName,最后按byType,未找到会抛异常。
摘要由CSDN通过智能技术生成

spring 用于注入数据的注解

1、在 spring 配置文件中引入 context 约束

 xmlns:context="http://www.springframework.org/schema/context"


http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd

2、开启注解支持

<!--开启spring 对注解的扫描,并指定被扫描的包-->
    <context:component-scan base-package="com.momo.entity"/>
    

@Autowired
作用:自动按照类型进行自动注入。不支持id匹配。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       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
        http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
<!--开启spring 对注解的扫描,并指定被扫描的包-->
    <context:component-scan base-package="com.momo.entity"/>

    <bean id="cat" class="com.momo.entity.Cat"/>
    <bean id="cat1" class="com.momo.entity.Cat"/>
    <bean id="dog" class="com.momo.entity.Dog"/>
    <bean id="user" class="com.momo.entity.User"/>


</beans>

需要注入的类。User

package com.momo.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {

    @Autowired
    private Cat cat;
    @Autowired
    private Dog dog;
    @Value("张三")
    private String name;
}

注入成功。

如果在容器里找不到对象,就会报错。@Autowired(required = false) required 设置为 false 表示对象可以为 null。

 @Autowired(required = false)
    private Cat cat;


或者:
  
  @Nullable
    private Cat cat;

@Qualifier
@Autowired 根据类型自动装配。在加上@Qualifier 则可以根据byName 的方式实现自动装配。
作用:
在自动按照类型注入的基础之上,在按照bean 的id注入。
@Qualifier 不单独使用,必须和 @Autowired 一起使用。
value : 指定bean 的id

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       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
        http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
<!--开启spring 对注解的扫描,并指定被扫描的包-->
    <context:component-scan base-package="com.momo.entity"/>


    <bean id="cat1" class="com.momo.entity.Cat">
        <property name="name" value="李四"/>
    </bean>
    <bean id="cat" class="com.momo.entity.Cat">
        <property name="name" value="王五"/>
    </bean>


    <bean id="dog" class="com.momo.entity.Dog"/>
    <bean id="user" class="com.momo.entity.User"/>


</beans>
package com.momo.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.lang.Nullable;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {


    @Autowired
    @Qualifier(value = "cat1")
    private Cat cat;
    @Autowired

    private Dog dog;
    @Value("张三")
    private String name;
}

还可以将注解加在 set 方法上

package com.momo.entity;

import org.springframework.beans.factory.annotation.Value;

public class Dog {


    private String name;


    @Value("旺财")
    public void setName(String name) {
        this.name = name;
    }

    public void eat(){
        System.out.println("狗吃骨头"+name);
    }
}

@Resource

@Resource 这个注解时  JAVA自带的注解。

直接按照bean 的id 注入,且只能注入 bean 类型。

name: 指定的bean 的id
package com.momo.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.lang.Nullable;

import javax.annotation.Resource;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {


    @Resource(name = "cat")
    private Cat cat;
    @Autowired

    private Dog dog;
    @Value("张三")
    private String name;
}

@Resource 如有 指定name属性,先按照 属性进行 byName 的方式装配。
其次在进行默认的byName 方式进行装配
如果以上都不成功,则在按照 byType 的方式进行装配。
都不成功就会报异常,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秦愿鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值