0
点赞
收藏
分享

微信扫一扫

spring 用于注入数据的注解

月半小夜曲_ 2022-02-01 阅读 43

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 的方式进行装配。
都不成功就会报异常,

举报

相关推荐

0 条评论