spring:自定义限定符注解@interface, 首选bean 1.首选bean 在声明bean的时候,通过将其中一个可选的bean设置为首选(primary)bean能够避免自动装配时的歧义性.当遇到歧义性的时候,Spring将会使用首选的bean,而不是其他可选的bean.实际上,你所声明就是“最喜欢”的bean. 假如有一个接口类: public interface Dessert{}.... 其中有3个类都集成了它@Componentpublic class Cake impleme…
案例一 定义接口  CD.java package interfacepackage; public interface CD { void play(); } 定义接口 player .java package interfacepackage; //定义一个播放器接口 public interface player { void play(); } 定义接口的实现类   CD1.java package bean; import org.springframework.stereotype.…
前言 在上一篇文章中分析了Spring是如何解析默认标签的,并封装为BeanDefinition注册到缓存中,这一篇就来看看对于像context这种自定义标签是如何解析的.同时我们常用的注解如:@Service.@Component.@Controller标注的类也是需要在xml中配置<context:component-scan>才能自动注入到IOC容器中,所以本篇也会重点分析注解解析原理. 正文 自定义标签解析原理 在上一篇分析默认标签解析时看到过这个类DefaultBeanDefinit…
我们知道springboot自动配置@EnableAutoConfiguration是通过@Import(AutoConfigurationImportSelector.class)来把自动配置组件加载进spring的context中的. 我们来看看@Import的定义: /** * Indicates one or more {@link Configuration @Configuration} classes to import. * * <p>Provides functionalit…
1.组件扫描 组件扫描(component scanning):Spring能够从classpath下自动扫描,侦测和实例化具有特定的注解的组件. 特定组件包括: —@Component:基本注解,标识了一个受Spring管理的组件 —@Respository:标识持久层组件,具有将数据库操作抛出的原生异常翻译转化为Spring的持久层异常的功能. —@Service:标识服务层(业务层)组件 —@Controller:标识表示层组 对于扫描到的组件,Spring有默认的命名策略:使用非限定类名…
业务描述:创建一个cache类然后交给spring 管理. @Component @Scope("singleton") public class Cache { public Cache() { System.out.println("cache()"); } @PostConstruct public void init() { System.out.println("init()"); } @PreDestroy public void d…
Condition:满足某个特定条件的情况下创建bean 条件化配置bean: a:@Conditional 指定一个class ,它指明了通过条件对比的类.如果没有指定class则通过Conditon接口进行条件对比: b:@Conditional 指定的类可以是任意实现了Condition接口的类 c:指定的类需要重写matches方法 1.例子1: @Bean @Conditional(MagicExistsConditon.class) //条件化的创建bean public Magic…
Spring配置中注解比XML更好吗?基于注解的配置的介绍提出的问题是否这种途径比XML更好.简单来说就是视情况而定. 长一点的答案是每一种方法都有自己的长处也不足,而且这个通常取决于开发者决定哪一种策略更适合他们.和他们被定 义的方式有关,注解在他们的定义中提供了大量的上下文信息,这样会提供更少更准确的配置.但是XML的优势是他不需要 访问他们的源代码也不需要重新编译他们在设置这些组件信息时.一些开发者更有去和源码相关操作而其他人质疑注解标识 的类不再是POJOs了,还有就是注解变成了分散管理…
定义profile <beans> //root <beans profile="dev"> <bean id=.../> </beans> <beans profile="qa"> <bean id=.../> </beans> <beans profile="prod"> <bean id=.../> </beans> &l…
条件化 bean 有时候我们要满足某种情况才将bean 初始化放入容器中. 基于环境初始化不同的 bean 1.申明接口并创建两个实现类 public interface Teacher { void startWorking(); } public class JavaTeacher implements Teacher { public void startWorking() { System.out.println("开始 Java 教学"); } } public class…