以前给容器中注册组件的方法也是可以用的。
比如:
- 给类标注 @Component 代表它是一个组件
- 给类标注 @Controller 代表它是一个控制器
- 给类标注 @Service 代表它是一个业务逻辑组件
- 给类标注 @Repository 代表它是一个数据库层组件
而且,只要组件写在默认的包扫描范围内,就可以被扫描到。
这些就不展开说了,都是以前的用法。
使用 @Import 给容器中导入组件
只要写在任何一个配置类或者组件里都行。
以配置类 MyConfig 举例:
@Import({User.class, DBHelper.class})

作用:调用这两个组件的无参构造器,创建出指定的组件对象,放在容器中。
看一下是不是真的有注册进去,修改主程序类的 mian 方法:
// 返回 IOC 容器ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);// 查看容器里的组件String[] names = run.getBeanDefinitionNames();for (String name : names) {System.out.println(name);}// 从容器中获取组件Pet cat1 = run.getBean("cat01", Pet.class);Pet cat2 = run.getBean("cat01", Pet.class);System.out.println("******* 测试组件是否为单实例 **********************");System.out.println(cat1 == cat2);// 查看配置类组件MyConfig myConfig = run.getBean(MyConfig.class);System.out.println("******* 查看配置类组件 **********************");System.out.println(myConfig);// 外部调用配置类的User user1 = myConfig.user01();User user2 = myConfig.user01();System.out.println("******* 是从容器中获取,还是普通的方法调用? **********************");System.out.println(user1 == user2);
运行 main 方法,可以看到已经输出了两个组件的名字
