欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring的@Autowire 简单使用

程序员文章站 2022-06-26 17:21:18
Spring的@Autowire 简单使用首先准备好类Friend / Hello/ SpringConfigerpackage com.lin.HowMuch.Bean;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Component;/*@Component@Scope("singleton")*/public class Friend { @O...

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