Spring的@Autowire 简单使用

2022-07-26,,

Spring的@Autowire 简单使用

首先准备好类Friend / Hello/ SpringConfiger

package com.lin.HowMuch.Bean;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
/*
@Component
@Scope("singleton")*/
public class Friend {
    @Override
    public String toString() {
        return super.toString();
    }
}
package com.lin.HowMuch.Bean;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class Hello {
    private Friend friend;

    /**
     * @Autowired 先byType然后再byName
     *
     * 这里的@Autowired先byType然后再byName 当IOC容器只有一个对应的属性的时候,两个参数拿到的对象是相同的(单例模式的时候)
     * singleton:
     * friend:com.lin.HowMuch.Bean.Friend@6ac13091
     * friend1:com.lin.HowMuch.Bean.Friend@6ac13091
     * prototype:
     * friend:com.lin.HowMuch.Bean.Friend@2b6faea6
     * friend1:com.lin.HowMuch.Bean.Friend@778d1062
     *
     * 然后在SpringConfiger.class 里面手动注入两个Bean 取消Friend 的自动注入
     * 1:让@Bean里面的 BeanName 分别和参数一致
     * 结果如下:
     * friend:com.lin.HowMuch.Bean.Friend@5ae50ce6
     * friend1:com.lin.HowMuch.Bean.Friend@6f96c77
     * 2.让@Bean里面的 BeanName 分别和参数不一致
     * 结果如下:
     * single matching bean but found 2
     * 此时可以完全验证@Autowired的注入方式是先byType然后再byName
     *
     * **************************************************************
     * 注意: @Autowired 在的地方为注入点,Spring根据注入点扫描是否实行依赖注入(所以说方法的名字无关) 但我们一般使用命名的规范原则见名知意
     * 只有一个Bean的时候就没有ByName的事情了,但是多例的时候得到的是不同的实例化对象。
     * 在属性上面的注入依靠的是反射的暴力注入不经过注入方法,IOC容器只有一个对应属性的Bean则忽略属性的名字,有两个的时候再依靠名字注入
     * @param friend
     * @param friend1
     */
    @Autowired
    public void riend(Friend friend,Friend friend1) {
        System.out.println("friend:"+friend);
        System.out.println("friend1:"+friend1);
        this.friend = friend;
    }
    @Override
    public String toString() {
        return super.toString()+" ======>> "+friend.toString();
    }
}

package com.lin.HowMuch.Configer;

import com.lin.HowMuch.Bean.Friend;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = "com.lin.HowMuch.Bean")
public class SpringConfiger {
    @Bean
    public Friend friend(){
        return new Friend();
    }
    @Bean
    public Friend friend1(){
        return new Friend();
    }
}
package com.lin.HowMuch.Test;

import com.lin.HowMuch.Bean.Hello;
import com.lin.HowMuch.Configer.SpringConfiger;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Test {
    @org.junit.Test
    public void f(){
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiger.class);
        Hello hello = ac.getBean("hello", Hello.class);
        System.out.println(hello);
    }

}

本文地址:https://blog.csdn.net/weixin_45099317/article/details/110502579

《Spring的@Autowire 简单使用.doc》

下载本文的Word格式文档,以方便收藏与打印。