0

I have a simple spring context file as following:

<bean id="acl.provider" class="com.provider.ProviderType" factory-method="getInstance">
    <constructor-arg index="0" value="${provider}"/>
</bean>

<bean id="acl.authentication" class="com.provider.AuthenticationFactory">
    <constructor-arg index="0">
        <value>#{ @acl.provider==T(com.provider.ProviderType).A
                  ?'classpath:cfg/a.spax'
                  :null}</value>
    </constructor-arg>
</bean>

When I initialize above context get following error:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'acl' is defined
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:527)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1083)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:274)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
    at org.springframework.context.expression.BeanFactoryResolver.resolve(BeanFactoryResolver.java:44)
    ... 124 more

When I change acl.provider bean name to aclprovider (remove . character) all things worked fine.

My question is: Why . character using in bean name and use in SpEL?

Sam
  • 6,770
  • 7
  • 50
  • 91

1 Answers1

0

I found solution use "" in SpEL as following:

<bean id="acl.provider" class="com.provider.ProviderType" factory-method="getInstance">
    <constructor-arg index="0" value="${provider}"/>
</bean>

<bean id="acl.authentication" class="com.provider.AuthenticationFactory">
    <constructor-arg index="0">
        <value>#{ @"acl.provider"==T(com.provider.ProviderType).A
                  ?'classpath:cfg/a.spax'
                  :null}</value>
    </constructor-arg>
</bean>

My problem solved.

Sam
  • 6,770
  • 7
  • 50
  • 91