2012-04-12 16 views
15

he definido en un archivo XML de configuración:¿Cómo se define un bean de primavera usando la anotación en lugar de XML?

<bean id="bootstrap" class="com.package.Bootstrap"></bean> 

esto funciona bien.

La clase bootsrap:

public class Bootstrap { 

    @PostConstruct 
    public void onServerStart() { 
     System.out.println("PRINTSSSSSSSSSSSSSSSSSSS"); 
    } 
} 

El método es despedido.

Pero, ¿cómo puedo deshacerme de la parte xml y anotar que bootstrap es un bean?

tengo

<mvc:annotation-driven /> 
<context:annotation-config /> 

y

<context:component-scan base-package="com.package" /> 

Pero preguntaba lo que la anotación utiliza debe ser que reemplaza:

<bean id="bootstrap" class="com.package.Bootstrap"></bean> 

no pude encontrar nada de esto en línea y en los documentos de primavera :(

Respuesta

18

Hay documentación sobre esto; querrás una anotación de estereotipo como @Component.

Stereotype bean annotations

+3

'@ Component' te ata a Spring. Considere el uso de anotaciones JSR-330 ('@ Named',' @ Inject') en su lugar: http://www.mkyong.com/spring3/spring-3-and-jsr-330-inject-and-named-example/ –

+0

@JJZabkar Lo mismo ocurre con '', ya están vinculados a Spring. –

+0

Sí, pero en archivos separados. Supongamos que anota sus beans con @ Component/@ Service/etc. Eso significaría que todas sus clases tienen dependencias 'import' (tiempo de compilación) en Spring Framework. Aún tendrá su configuración XML. (Continuación) –

4

este es un ejemplo sencillo que acabo de hacer:

Main.java

package the.test; 

import org.springframework.context.annotation.AnnotationConfigApplicationContext; 
import org.springframework.context.support.AbstractApplicationContext; 

public class Main { 

public static void main(String[] args) { 

    AbstractApplicationContext aac = new AnnotationConfigApplicationContext(Person.class, Phones.class); 
    Person person = aac.getBean(Person.class); 
    System.out.println(person.getPhones().getPhoneOne()); 
    System.out.println(person.getPhones().getPhoneTwo()); 
    System.out.println(person.getSurname()); 
    System.out.println(person.getName()); 
    System.out.println(person.getAge()); 
    aac.close(); 

    } 
} 


Person.java

package the.test; 

import javax.annotation.Resource; 

import org.springframework.beans.factory.annotation.Value; 
import org.springframework.context.annotation.Configuration; 

@Configuration 

//you may use @ComponentScan("the.test") here and omit declaring 
//"Phone.class" in the main method 

public class Person { 
private int age; 
private String name; 
private String surname; 

private Phones phones; 

public int getAge() { 
    return age; 
} 
@Value("33") 
public void setAge(int age) { 
    this.age = age; 
} 

public String getName() { 
    return name; 
} 

@Value("John") 
public void setName(String name) { 
    this.name = name; 
} 

public String getSurname() { 
    return surname; 
} 

@Value("Due") 
public void setSurname(String surname) { 
    this.surname = surname; 
} 

public Phones getPhones() { 
    return phones; 
} 
@Resource 
public void setPhones(Phones phones) { 
    this.phones = phones; 
} 
} 


Phones.java

package the.test; 

import org.springframework.beans.factory.annotation.Value; 
import org.springframework.context.annotation.Configuration; 

@Configuration 
public class Phones { 
private String PhoneOne; 
private String PhoneTwo; 

public String getPhoneOne() { 
    return PhoneOne; 
} 

@Value("987654321") 
public void setPhoneOne(String phoneOne) { 
    PhoneOne = phoneOne; 
} 

public String getPhoneTwo() { 
    return PhoneTwo; 
} 

@Value("123456") 
public void setPhoneTwo(String phoneTwo) { 
    PhoneTwo = phoneTwo; 
} 

} 

este está completamente basado en la primavera de anotación y se realiza en el marco de primavera 4.2.5

espero que ayude.

Cuestiones relacionadas