2016-02-09 9 views
1

Я новый пчела весной и играл с аннотацией «Autowired» в моей небольшой тестовой программе. До сих пор я узнал, что сделать аннотацию работы «Autowired» мы должны включить его из весенне- контекста XML с помощью тега:Есть ли все-таки устранить spring-context xml и включить аннотации программно?

<context:annotation-config /> 

мне было интересно, есть ли способ устранить XML и включить аннотацию из программы.

Вот моя программа весны, которая работает с весенний контекст, определенный в xml.

SpringContext.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: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/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 


      <context:annotation-config /> 

      <!-- bean definitions go here --> 

      <bean id="mainClass" class="com.myproject.spring.MyTester" /> 
      <bean id="student" class="com.myproject.spring.model.Student" scope="prototype" /> 
</beans> 

Мои Bean:

package com.myproject.spring.model; 



public class Student 
{ 
    private String name = "Johhn Hasel"; 


    public String getName() 
    { 
     return name; 
    } 


    public void setName(String name) 
    { 
     this.name = name; 
    } 

    @Override 
    public String toString() { 
     return name; 
    } 

} 

И мой основной класс для этого приложения:

package com.myproject.spring; 

import com.myproject.spring.model.Student; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

public class MyTester 
{ 

    @Autowired 
    private Student student; 


    public static void main(String[] args) 
    { 

     ApplicationContext context = new ClassPathXmlApplicationContext("SpringContext.xml"); 
     MyTester mtster = context.getBean(MyTester.class); 

     System.out.println(mtster.student.toString()); 

    } 



} 

ответ

1

Если у вас есть чистый автономное приложение вам нужно, как минимум, до

  1. аннотировать класс студентов с @Component
  2. аннотировать класс MyTester с @ComponentScan и @Configuration
  3. Обмен на ClassPathXmlApplicationContext (..) с новым AnnotationConfigApplicationContext (MyTester.класс)

Что произойдет за кулисами

  1. , что вы отмечаете свой Студента как класс доступен для автоматического обнаружения
  2. установить класс MyTester в качестве отправной точки для компонентов сканирования и в виде класс, который может содержать конфигурации, такие как @Bean-определения
  3. Сообщите Spring использовать конфигурацию, управляемую аннотацией, с начальной точкой в ​​классе MyTester
2

Вставьте следующий файл XML сервлета:

<context-param> 
     <param-name>contextClass</param-name> 
     <param-value> 
      org.springframework.web.context.support.AnnotationConfigWebApplicationContext 
     </param-value> 
    </context-param> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

Вы можете иметь класс Java, чтобы определить конфигурацию, которая будет аннотированный с @Configuration аннотацию.

Пример аннотированный класса конфигурации:

@Configuration 
@ComponentScan(basePackages = "com.myproject.spring") 
@EnableWebMvc 
public class MvcConfiguration extends WebMvcConfigurerAdapter { 

    @Bean 
    public ViewResolver getViewResolver() { 
     InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
     resolver.setPrefix("/WEB-INF/pages/"); 
     resolver.setSuffix(".jsp"); 
     return resolver; 
    } 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 
    } 

    @Bean 
    public Student student() { 
     return new Student(); 
    } 

} 

Вам также необходимо аннотировать студенческий класс компонента с @Component аннотацию.

Пример:

@Component 
public class Student { 
... 
} 

Если вы предпочитаете, вы можете обратиться к вашей боб конфигурации, используя ниже вместо определения контекста конфигурации аннотаций в вашем сервлет XML.

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MvcConfiguration.class);