2017-03-20 2 views
0
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> 
    <property name="securityManager" ref="securityManager"/> 
    <property name="loginUrl" value="/"/> 
    <property name="filterChainDefinitionMap" ref="chainFilterBuff" /> 
</bean> 

<bean id="chainFilterBuff" class="org.moofie.test.security.FilterChainBean"> 
    <property name="filterChainDefinitions"> 
     <value>/test/login=anon</value> 
    </property> 
</bean> 

내 스프링 설정봄 사용 autowire가 주석 위

private String filterChainDefinitions; 
public String getFilterChainDefinitions() { 
    return filterChainDefinitions; 
} 

public void setFilterChainDefinitions(String filterChainDefinitions) { 
    this.filterChainDefinitions = filterChainDefinitions; 
} 

이며, 그것은 getter와 setter와 잘 작동이 내 자바 코드 잘못 도착,하지만 난 @Autowired와 getter 및 setter를 교체하려면 이 같은 annotaion :

@Autowired 
private String filterChainDefinitions; 

이 얻을 오류 :

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [java.lang.String] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1100) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:960) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:855) 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480) 
... 34 more 

내 코드에 무슨 문제가 있습니까? 아니면 다른 주석을 사용해야합니까?

+0

은 당신이 정말로에서 1과 전용 한'String' 콩이 마십시오 응용 프로그램 컨텍스트? '@ Autowired'는 getter와 setter를 대체하는 것이 아닙니다. 정확히 당신이 성취하고자하는 것은 무엇입니까? –

+0

getter와 setter를 더 짧은 코드로 대체하려고합니다. 어떤 주석으로도 만들 수 있습니까? – user2853610

+0

getter/setter를 명시 적으로 작성하고 getter/setter를 계속 사용하고 싶지 않은지 아직 확실하지 않습니다. 아니면 봄에 사용되는 콩에 대한 getter/setter조차 원하지 않습니까? –

답변

1

설정 XML에서 <property name="filterChainDefinitions"></property>을 사용하여 직접 setter를 호출하기 때문에 setter 및 getter 방식이 작동합니다.

@Autowired는 명시 적으로 선언 된 bean에서 작동합니다. 당신이 filterChainDefinitions을 설정하기 위해 @Autowired를 사용하려면

, 당신은 아래와 같이 먼저 선언해야합니다

<bean id="filterChainDefinitions" class="java.lang.String"> 
    <constructor-arg value="/test/login=anon"/> 
</bean>