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);
    }
  }
}



相关文章
|
15天前
|
XML 安全 Java
|
13天前
|
安全 Java 开发者
Spring容器中的bean是线程安全的吗?
Spring容器中的bean默认为单例模式,多线程环境下若操作共享成员变量,易引发线程安全问题。Spring未对单例bean做线程安全处理,需开发者自行解决。通常,Spring bean(如Controller、Service、Dao)无状态变化,故多为线程安全。若涉及线程安全问题,可通过编码或设置bean作用域为prototype解决。
26 1
|
19天前
|
前端开发 Java Spring
Spring MVC核心:深入理解@RequestMapping注解
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的核心,它将HTTP请求映射到控制器的处理方法上。本文将深入探讨`@RequestMapping`注解的各个方面,包括其注解的使用方法、如何与Spring MVC的其他组件协同工作,以及在实际开发中的应用案例。
35 4
|
19天前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
58 2
|
19天前
|
前端开发 Java Spring
探索Spring MVC:@Controller注解的全面解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序的基石之一。它不仅简化了控制器的定义,还提供了一种优雅的方式来处理HTTP请求。本文将全面解析`@Controller`注解,包括其定义、用法、以及在Spring MVC中的作用。
40 2
|
22天前
|
消息中间件 Java 数据库
解密Spring Boot:深入理解条件装配与条件注解
Spring Boot中的条件装配与条件注解提供了强大的工具,使得应用程序可以根据不同的条件动态装配Bean,从而实现灵活的配置和管理。通过合理使用这些条件注解,开发者可以根据实际需求动态调整应用的行为,提升代码的可维护性和可扩展性。希望本文能够帮助你深入理解Spring Boot中的条件装配与条件注解,在实际开发中更好地应用这些功能。
26 2
|
19天前
|
前端开发 Java 开发者
Spring MVC中的控制器:@Controller注解全解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序控制层的核心。它不仅简化了控制器的定义,还提供了灵活的请求映射和处理机制。本文将深入探讨`@Controller`注解的用法、特点以及在实际开发中的应用。
50 0
|
6月前
|
Java 开发者 Spring
解析Spring中Bean的生命周期
解析Spring中Bean的生命周期
59 2
|
6月前
|
XML druid Java
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
69 0
|
2月前
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细解析Spring Bean的生命周期及其核心概念,并深入源码分析。Spring Bean是Spring框架的核心,由容器管理其生命周期。从实例化到销毁,共经历十个阶段,包括属性赋值、接口回调、初始化及销毁等。通过剖析`BeanFactory`、`ApplicationContext`等关键接口与类,帮助你深入了解Spring Bean的管理机制。希望本文能助你更好地掌握Spring Bean生命周期。
127 1