복붙노트

[SPRING] 왜 @Service가 bean을 만들지 않는 것처럼 클래스에 주석을 붙이겠습니까?

SPRING

왜 @Service가 bean을 만들지 않는 것처럼 클래스에 주석을 붙이겠습니까?

나에게는 다음과 같은 수업이있다 :

@Service("userDetailsService") 
public class MyUserDetailsService implements UserDetailsService {
    ...

시도하고 :

<authentication-manager>
    <authentication-provider user-service-ref="userDetailsService">
    </authentication-provider>
</authentication-manager>

나는 followin 오류있어 :

콩을 선고하는 것이 정말로 필요한가요? 이 경우 다음과 같이하십시오.

<beans:bean id="myUserDetailsService" class="my.package.services.MyUserDetailsService" />

편집하다

다음은 내 security.xml 파일입니다.

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc" 
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/jdbc
           http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
           http://www.springframework.org/schema/security
           http://www.springframework.org/schema/security/spring-security-3.0.xsd">

    <http>
        <form-login login-page="/login/"
            authentication-failure-url="/fail/" />
        <logout logout-success-url="/" />
    </http>

    <context:annotation-config />
    <context:component-scan base-package="my.package" />

    <authentication-manager>
        <authentication-provider user-service-ref="myUserDetailsService">
            <!-- <password-encoder hash="md5" /> -->
        </authentication-provider>
    </authentication-manager>

</beans:beans>

원인 :

해결법

  1. ==============================

    1.컨텍스트에 대한 스키마 위치가 누락되었습니다.

    컨텍스트에 대한 스키마 위치가 누락되었습니다.

    따라서 XML은 다음으로 시작해야합니다.

    <beans:beans xmlns="http://www.springframework.org/schema/security"
        xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:jdbc="http://www.springframework.org/schema/jdbc" 
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
               http://www.springframework.org/schema/jdbc
               http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
               http://www.springframework.org/schema/security
               http://www.springframework.org/schema/security/spring-security-3.0.xsd
               http://www.springframework.org/schema/context 
               http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
  2. ==============================

    2.어노테이션을 사용하여 bean을 지정하는 경우, 구성에 항목을 추가하여 클래스 경로를 스캔해야합니다.

    어노테이션을 사용하여 bean을 지정하는 경우, 구성에 항목을 추가하여 클래스 경로를 스캔해야합니다.

    <context:component-scan base-package="org.example"/>
    
  3. ==============================

    3.@Service는 클래스 경로 검색을 허용하는 @Component를 확장합니다.

    @Service는 클래스 경로 검색을 허용하는 @Component를 확장합니다.

    클래스 경로 검색과 주석을 모두 활성화 할 수 있습니다.

    <context:annotation-config />
    <context:component-scan base-package="com.package.a,com.b" />
    

    어떤 버전을 사용하고 있는지 모르겠습니다. 이 시도.

    <authentication-manager>
        <authentication-provider user-service-ref="userDetailsService">
            <!-- <password-encoder hash="md5" /> -->
        </authentication-provider>
    </authentication-manager>
    

    그렇게하지 않으면 이름이 클래스 이름이됩니다. 그러나 당신은 config 파일에서 다른 것을 말하면서 같은 이름을 제공 할 것입니다.

    이름없이 @Service를 사용하면 괜찮습니다.

  4. ==============================

    4.를 사용하여 spring-security.xml에 다른 xml 파일을 가져 오면됩니다.

    를 사용하여 spring-security.xml에 다른 xml 파일을 가져 오면됩니다.

    당신이 할 수있는 또 다른 일은 web.xml 파일에있는 모든 XML 파일을로드하는 것입니다.

    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    path to the xml files separated by commas
    </param-value>
    </context-param>
    
  5. from https://stackoverflow.com/questions/8173009/why-does-annotate-class-as-service-do-not-create-bean by cc-by-sa and MIT license