2015-05-05 5 views
0

У меня есть одна из моих проблем в googled, и я нашел ссылку через @component аннотация.Что такое xml-конфигурационное представление @компонентной весной

Но в моем приложении я использую конфигурацию xml, потому что аннотации являются неприятными и не настраиваемыми, и вам нужно перекомпилировать весь код co change smth.

Итак, мой вопрос: как использовать это решение с xml-conf? Как реализовать компонент в нем?

+1

Совет: вам придется перестроить, если вы все равно измените XML-файлы, а аннотации, как правило, гораздо читабельнее и удобнее. – chrylis

+0

С аннотациями вы должны взглянуть на весь код проекта, чтобы найти что-то, и вы можете просто изменить конфигурацию прямо в военном файле и только повторно развернуть свое приложение. Но в любом случае использование аннотаций в моем проекте невозможно. – TEXHIK

ответ

0

EDIT

Из вашего комментария я могу видеть, что вы хотите добавить слушателя AuthenticationEvent

public class AuthenticationEventListener 
     implements ApplicationListener<AbstractAuthenticationEvent> { 

    @Override 
    public void onApplicationEvent(AbstractAuthenticationEvent event) { 
     // process the event 
    } 
} 

Теперь вы должны положить фасоль этого типа в же весенний контекст, где настроена защита. Предположим, вы настроили свою весеннюю безопасность в security-context.xml. Затем вы должны определить ваш компонент в этом контексте

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:security="http://www.springframework.org/schema/security" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans.xsd 
          http://www.springframework.org/schema/security 
          http://www.springframework.org/schema/security/spring-security-3.2.xsd"> 

    <security:global-method-security secured-annotations="enabled" /> 

    <security:http auto-config="true"> 
     <!-- Restrict URLs based on role --> 
     <security:intercept-url pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <security:intercept-url pattern="/logoutSuccess*" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 

     <security:intercept-url pattern="/css/main.css" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <security:intercept-url pattern="/resources/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 

     <security:intercept-url pattern="/**" access="ROLE_USER" /> 

     <!-- Override default login and logout pages --> 
     <security:form-login login-page="/login.html" 
          login-processing-url="/loginProcess" 
          default-target-url="/index.jsp" 
          authentication-failure-url="/login.html?login_error=1" /> 
     <security:logout logout-url="/logout" logout-success-url="/logoutSuccess.html" /> 
    </security:http> 

    <security:authentication-manager> 
     <security:authentication-provider > 
      <security:jdbc-user-service data-source-ref="dataSource" /> 
     </security:authentication-provider> 
    </security:authentication-manager> 

    <bean id="authenticationEventListener" 
     class="AuthenticationEventListener"/> 


    </beans> 

P.S.

Если вы не хотите использовать аннотацию @component, вы можете создать компонент непосредственно в своем xml.

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

    <bean id="helloWorld" class="com.HelloWorld" 
     scope="singleton" name="componentValue"> 
    </bean> 

</beans> 

Xml или аннотации в любом случае ваш компонент будет будет под контекстом приложения.

@ Компонентная аннотация была введена для автоматического обнаружения и конфигурирования фасонов во время сканирования пути.

+0

Работает для загрузки моего класса, но по некоторым причинам событие, в котором оно выполняется, выполняет точечную работу: 'реализует ApplicationListener ' 'onApplicationEvent (abstractAuthenticationEvent event) {System.out.println (" smth ");}' – TEXHIK

+0

Спасибо! Но последний маленький вопрос: что означает 'name =" componentValue "' и для чего это нужно (это wokrs для меня без этого атрибута)? – TEXHIK

+1

Этот атрибут является необязательным. Если вы не укажете этот атрибут, атрибут name будет взят из имени класса. – mirmdasif

Смежные вопросы