SPRING02_核心注解、Bean、primary、DependsOn、Lazy、Scope、ComponentScan、详解Import、Lookup注解(四)

简介: SPRING02_核心注解、Bean、primary、DependsOn、Lazy、Scope、ComponentScan、详解Import、Lookup注解(四)

⑤. 使用@Lookup注解解决问题


// 加上ComponentScan进行包扫描 一定要加上
@Configuration
// @Import(Person.class)
//如果要导入两个用下面的方式
//@Import({Person.class, MyConfig.MyImportBeanDefinitionRegistrar.class})
@ComponentScan(value = "com.xiaozhi") //这里一定要进行包扫描
public class MyConfig {


//@Autowired //依赖的组件是多实例就不能Autowired
@Component
public class Person{
  private String name;
  @Autowired //依赖的组件是多实例就不能Autowired
  private Cat cat;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public void setCat(Cat cat) {
    this.cat = cat;
  }
  @Lookup//去容器中找
  public Cat getCat() {
    return cat;
  }
  @Override
  public String toString() {
    return "Person{" +
        "name='" + name + '\'' +
        '}';
  }
}


public class AnnotationMainTest {
  public static void main(String[] args) {
    ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MyConfig.class);
//    Person person = applicationContext.getBean(Person.class);
//    System.out.println("person = " + person);
//    String[] names = applicationContext.getBeanDefinitionNames();
//    /**
//     * 如果使用的是import方式导入的,那么这个bean的名字就是全类名
//     * com.xiaozhi.bean.Person
//     * tomcat
//     */
//    for (String name : names) {
//      System.out.println(name);
//    }
    Person person = applicationContext.getBean(Person.class);
    Cat cat1 = person.getCat();
    Cat cat2 = person.getCat();
    //false,这里是false,表示获取到的是多列的
    System.out.println(cat1==cat2);
    String[] names = applicationContext.getBeanDefinitionNames();
    /**
     * 这里我们在配置文件中配置了@ComponentScan(value = "com.xiaozhi")
     * 进行扫描,可以看到这里的person和cat的名称
     * cat
     * person
     */
    for (String name : names) {
      System.out.println(name);
    }
  }
}



相关文章
|
20天前
|
缓存 安全 Java
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
从底层源码入手,通过代码示例,追踪AnnotationConfigApplicationContext加载配置类、启动Spring容器的整个流程,并对IOC、BeanDefinition、PostProcesser等相关概念进行解释
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
|
20天前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
117 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
7天前
|
XML Java 数据格式
spring复习02,xml配置管理bean
详细讲解了Spring框架中基于XML配置文件管理bean的各种方式,包括获取bean、依赖注入、特殊值处理、属性赋值、集合类型处理、p命名空间、bean作用域及生命周期和自动装配。
spring复习02,xml配置管理bean
|
8天前
|
Java Spring 容器
Spring使用异步注解@Async正确姿势
Spring使用异步注解@Async正确姿势,异步任务,spring boot
|
7天前
|
XML Java 数据格式
spring复习03,注解配置管理bean
Spring框架中使用注解配置管理bean的方法,包括常用注解的标识组件、扫描组件、基于注解的自动装配以及使用注解后的注意事项,并提供了一个基于注解自动装配的完整示例。
spring复习03,注解配置管理bean
|
8天前
|
XML 前端开发 Java
控制spring框架注解介绍
控制spring框架注解介绍
|
4月前
|
Java 开发者 Spring
解析Spring中Bean的生命周期
解析Spring中Bean的生命周期
46 2
|
4月前
|
XML druid Java
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
45 0
|
3月前
|
Java Spring 容器
Spring Boot 启动源码解析结合Spring Bean生命周期分析
Spring Boot 启动源码解析结合Spring Bean生命周期分析
87 11
|
2月前
|
前端开发 Java 开发者
下一篇
无影云桌面