简单来讲。。。就是 【 SpringBoot 无法直接获取 第三方 jar包 中 bean 】
【jar包使用@Enable** 形式,提供了 spring 将 bean ,加入IOC 容器的方式】
SpringBoot启动类,不会扫描 非同一个 包下的 bean,不会加入IO从容器
要创建,这个bean。。要么 加入扫描 这个包。但三方模块不知导入扫描那个包。
@Enable* 形式,底层封装了 @import(类。class),,自动加入IOC容器。
SpringBoot 非同一个包 下,
使用@EnableConfigurationProperties(放入加了@ConfigurationProper。class )
SpringBoot可将 @Enable*后的类 。。加入IOC 容器
(1)首先 @ConfigurationProperties ,,,是为了 读取 配置文件
使用有几个前提
a)要让java对象,与配置文件自动映射,要加 prefix=“配置文件对象名”
b)User类 写get set 方法
c)类上 加注解@Component ,才能被spring加入 IOC 容器,成为 bean。。对象存在,才能映射
@Component
@ConfigurationProperties(prefix = "user")
public class User {
private String name;
private int age;
...get ,,,,set 方法
}
user:
name: name1
age: 18
(2) @EnableConfigurationProperties与 @ConfigurationProperties 的关系,
就是多了 一个 @Enable。。。@Enable*** 是一种封装形式。
这个形式,什么作用?
======================
a) 首先了解。。。 上面 代码 中的 @Component ,对象存在,才能映射。
如果 类 和当前 springBoot的启动类,在同一个 【包】,Spring 自然能读取 @Componment,
若不在一个包呢????
参看springBoot的启动类注解 @ComponentScan(,如果【不在】 【一个包】,
启动类,不会扫描这个包 。。。 就无法加入spring的IOC容器
(当然我们可以,在启动类上 。。加入扫描这个包,,这样也能加入ioc
//@ComponentScan("com.itheima.springbootenable1.config")
)
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
。。。。。
)
public @interface SpringBootApplication {
=================
b) 下面,将讲解 @Enable这种形式。。。。与上文中的 User 类无关
但对于,外部引入的 第三方模块【与启动类,不在一个包】。且【不知道 导入那个包】,该如何 配置
这样,就 引入了 @Enable** 这种形式 ,其底层 是 封装的 @Import 注解
我们都用 @Import (*.class)导入过类, 会将其 导入的类,直接加入到 spring的IOC容器。
这是 A 包
@Configuration
public class UserConfig {
@Bean
public User createUser() {
return new User();
}
@Import({UserConfig.class})
public @interface EnableUser {
}
我们创建了 自定义 注解 @EnableUser。。。封装的 @import(类。class)
bean的提供者。。使用了 @Enable*的形式,,,如此,可不用import(类。class)
B包 【不是同一个包】 直接使用这个注解,,,就能将其 加入 IOC容器,直接获取【不是同一个包 bean】
B包的 SpringBoot的启动类
//import的 4种导入方式
//@Import(User.class)
//@Import({UserConfig.class})
//@Import(MyImportSelector.class)
//@Import(MyImportBeanDefinitionRegistrar.class)
@EnableUser
public class SpringBootEnable2Application {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(SpringBootEnable2Application.class, args);
Object user = context.getBean("createUser");
System.out.println(user);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)