1 package com.atlassian.plugin.spring.scanner.runtime.impl.util;
2
3 import org.springframework.beans.factory.config.BeanDefinition;
4 import org.springframework.beans.factory.support.BeanDefinitionRegistry;
5
6 public class BeanDefinitionChecker {
7
8
9
10
11
12
13 public static boolean needToRegister(String beanName, BeanDefinition beanDefinition, BeanDefinitionRegistry registry) throws IllegalStateException {
14 if (!registry.containsBeanDefinition(beanName)) {
15 return true;
16 }
17
18 BeanDefinition existingDef = registry.getBeanDefinition(beanName);
19 BeanDefinition originatingDef = existingDef.getOriginatingBeanDefinition();
20 if (originatingDef != null) {
21 existingDef = originatingDef;
22 }
23 if (isCompatible(beanDefinition, existingDef)) {
24 return false;
25 }
26 throw new IllegalStateException("Annotation-specified bean name '" + beanName +
27 "' for bean class [" + beanDefinition.getBeanClassName() + "] conflicts with existing, " +
28 "non-compatible bean definition of same name and class [" + existingDef.getBeanClassName() + "]");
29 }
30
31
32
33
34
35
36
37
38
39 public static boolean isCompatible(BeanDefinition newDefinition, BeanDefinition existingDefinition) {
40
41 return (newDefinition.getBeanClassName().equals(existingDefinition.getBeanClassName()) ||
42 newDefinition.equals(existingDefinition));
43 }
44 }