2012-04-12 19 views
15

Mam zdefiniowane w pliku konfiguracyjnym XML:Jak zdefiniować Spring bean za pomocą adnotacji zamiast XML?

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

to działa prawidłowo.

Klasa bootsrap:

public class Bootstrap { 

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

Metoda zostanie zwolniony.

Ale jak mogę pozbyć się części xml i opisać bootstrap zamiast fasoli?

mam

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

i

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

Ale zastanawiałem co adnotacji stosowane powinno być, że zastępuje:

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

nie mogłem znaleźć nic na ten temat online i na wiosnę docs :(

Odpowiedz

18

Istnieje dokumentacja dotycząca tego; będziesz potrzebować adnotacji o stereotypach, takich jak @Component.

Stereotype bean annotations

+3

'@ Komponent' wiąże cię z wiosną. Rozważ skorzystanie z adnotacji JSR-330 ('@Named',' @ Inject') zamiast: http://www.mkyong.com/spring3/spring-3-and-jsr-330-inject-and-named-example/ –

+0

@JJZabkar Podobnie jak "", są już powiązane ze Spring. –

+0

Tak, ale w oddzielnych plikach. Przypuśćmy, że przypisujecie swoje fasole za pomocą @ Component/@ Service/etc. Oznaczałoby to, że wszystkie twoje klasy mają zależności "import" (kompilacja) w Spring Framework. Nadal będziesz mieć konfigurację XML. (Kontynuacja) –

4

jest to prosty przykład, który właśnie się:

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; 
} 

} 

ten jest całkowicie oparty na wiosennym Adnotacja i jest wykonany na Spring Framework 4.2.5

nadzieję, że to pomaga.

Powiązane problemy