spring注入时bean的set方法为啥不能是static类型的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring注入时bean的set方法为啥不能是static类型的?相关的知识,希望对你有一定的参考价值。

使用spring对bean属性进行注入时,如果set方法设置为static类型的,spring在初始化时会提示找不到属性,请问是怎么回事,为什么不能是static类型的

这个问题以前没有考虑过,get,set方法都是自动生成的,没有想到把他设置成static

我这样设置时spring容器可以给我注入我要的属性对象

参考技术A 静态方法是属于类(class)的,普通方法才是属于实体对象(也就是New出来的对象)的,spring注入是在容器中实例化对象,所以不能使用静态方法

Spring依赖注入 set方法注入

涉及的标签:property

标签的属性:

  name:用于指定注入时所调用的set方法的名称(注意name的值是set方法的名字小写)

  value:用于提供基本数据类型和String类型的数据

  ref:用于指定其他的bean。它的值就是在spring的Ioc核心容器中出现过的bean对象

 

优势:创建对象是时没有明确的要求,可以直接使用默认的构造函数

弊端:如果有某个成员必须有值,则获取对象时有可能set方法没有执行

<bean id="accountService" class="com.xuefei.service.impl.AccountServiceImpl">
        <property name="name" value="小王"></property>
        <property name="age" value="22"></property>
        <property name="date" ref="now"></property>
    </bean>
    <bean id="now" class="java.util.Date"></bean>
package com.xuefei.service.impl;

import com.xuefei.service.AccountService;

import java.util.Date;

/**
 * 账户业务层实现类
 */
public class AccountServiceImpl implements AccountService {

    String name;
    Integer age;
    Date date;

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

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

    public void setDate(Date date) {
        this.date = date;
    }
    public void say() {
        System.out.println("我是"+name+"今年"+age+"岁了!"+date);
    }

    public void saveAccount() {
    }
}

 

以上是关于spring注入时bean的set方法为啥不能是static类型的?的主要内容,如果未能解决你的问题,请参考以下文章

spring 注解

Spring依赖注入 set方法注入

spring bean注入报空指针null,但set设值时对象是存在的,而且只是部分方法报空指针

为啥我不能将此 Spring Boot 服务类注入 JUnit 测试类?预计至少有 1 个 bean 有资格作为 autowire 候选者

为啥使用set注入,一定要给类提供一个无参的构造函数,否则Spring不能实例化类的.

Spring依赖注入的Setter注入(通过get和set方法注入)