通过@Configuration注解来配置类
1、 @Configuration 是一个类级注解,用于表明该类是Bean定义的来源。通过在类中声明带有 @Bean 注解的公共方法,可以定义和注册Bean实例。这些方法的返回值将被Spring容器管理为Bean。此外,在同一个 @Configuration 类中,一个 @Bean 方法可以调用另一个 @Bean 方法,从而明确地建立Bean之间的依赖关系,实现依赖注入。
2、 当多个Bean存在依赖关系时,只需在一个Bean的方法中调用另一个Bean,即可清晰表达这种依赖,如下例所示。
3、 在之前的例子中,beanOne 通过构造函数接收对 beanTwo 的引用注入。
4、 只有在@Configuration类中定义的@Bean方法才能声明Bean之间的依赖关系,而在普通的@Component类中无法实现Bean依赖的声明。
5、 查找方法注入是一种较为冷门的高级特性,适用于单例Bean依赖原型Bean的场景。通过Java配置方式,能够更自然地实现这一设计模式,有效解决作用域冲突问题,提升容器管理对象的灵活性与准确性。
6、 示例展示查找方法的注入使用方式
7、 通过Java配置,可定义CommandManager的子类并重写其抽象方法createCommand(),用于获取新的原型命令对象。以下示例展示了具体的实现方式:创建子类,在该方法中返回所需的具体命令实例,从而实现对象的动态创建与管理,提升灵活性和可扩展性。
8、 关于Java配置的内部机制,可通过以下示例了解:一个被@Bean注解的方法被调用了两次,展示了其执行过程与行为特点。
9、 clientDao() 方法会被 clientService1() 和 clientService2() 各自调用一次。该方法每次执行都会创建一个新的 ClientDaoImpl 实例并返回,因此按照常规逻辑,两个服务将各自持有独立的实例。然而在 Spring 框架中,默认情况下 bean 是单例作用域的,这就可能引发问题——如何确保多次调用仍返回同一个实例?其背后的关键机制在于:所有标注为 @Configuration 的类在应用启动时会通过 CGLIB 技术生成子类。在这个生成的子类中,对 clientDao() 这样的方法调用并不会直接执行原方法体。相反,子类会先拦截调用,检查 Spring 容器中是否已存在对应名称和类型的 bean 实例。若已存在,则直接返回容器中的缓存实例;只有在未找到时,才会继续调用父类方法创建新实例,并将其纳入容器管理。这一过程实现了单例的保障,确保了多次调用仍返回同一对象。
评论
更多评论