看到今天,方才把前面 demo2 中的一些地方想明白。就好比一个数学系的研究生在给初中生讲数据题的时候,不知不觉就会用到超纲的知识,这也是为什么各类大神的教程(视频或文字)按些步骤来总有对不上的地方,因为他们大概率会用到超纲知识,或不小心就按了什么快捷键完成了个什么操作,而作为老白的我们,却浑然不知问题出在哪里了......
条件注解:如果注解指定的条件成立,则触发指定行为
@ConditionalOnXxx
@ConditionalOnClass:如果类路径中存在这个类,则触发指定行为
@ConditionalOnMissingClass:如果类路径中不存在这个类,则触发指定行为
@ConditionalOnBean:如果容器中存在这个Bean(组件),则触发指定行为
@ConditionalOnMissingBean:如果容器中不存在这个Bean(组件),则触发指定行为
场景:
- 如果存在
FastsqlException
这个类,给容器中放一个Cat
组件,名cat01, - 否则,就给容器中放一个
Dog
组件,名dog01
java
// 放在方法级别,单独对这个方法进行注解判断。
@ConditionalOnClass(name="com.alibaba.druid.FastsqlException")
@Bean
public Cat cat01(){
return new Cat();
}
// 这句新补的,视频教程里大神有说,但是他没写这句,又把这段反复看了几次,包括关联的上下文知识
// 发现这句大神是没有写的,在大神的素材里也没看到
// 尽信神则无神!自勉!
@ConditionalOnMissingClass(value="com.alibaba.druid.FastsqlException")
@Bean
public Dog dog01(){
return new Dog();
}
- 如果系统中有
dog01
这个组件,就给容器中放一个 User组件,名zhangsan - 否则,就放一个User,名叫lisi
java
@ConditionalOnBean(value = Dog.class)
@Bean
public User zhangsan(){
return new User();
}
@ConditionalOnMissingBean(value = Dog.class)
@Bean
public User lisi(){
return new User();
}
@ConditionalOnBean(value=组件类型,name=组件名字):判断容器中是否有这个类型的组件,并且名字是指定的值
**PS:**重新更正里面的代码,新补了一行。视频教程里大神有说,但是他没写这句,自己照着写,得出的结果和大神的不一样。于是又把这段视频反复看了几次,又看了包括关联的上下文知识。发现有行代码大神是没有写的,在大神的提供教学素材里也没看到。
尽信神则无神!
自勉!
身坚志残的老白!