2012-04-12 117 views
15

我在一個XML配置文件中定義:如何使用註解而不是XML來定義Spring bean?

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

能正常工作。

的bootsrap類:

public class Bootstrap { 

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

的方法時觸發。

但是我怎樣才能擺脫xml部分,並註釋引導是一個bean呢?

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

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

但我想知道什麼註釋使用應該是取代:

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

我找不到這事在線和在春季文檔:(

回答

18

有關於此的文檔;你會想要一個原型註釋,如@Component

Stereotype bean annotations

+3

'@ Component'將您與Spring聯繫起來。考慮使用JSR-330註釋('@ Named','@ Inject')來代替:http://www.mkyong.com/spring3/spring-3-and-jsr-330-inject-and-named-example/ – 2013-06-04 16:04:42

+0

@JJZabkar所以''mvc:annotation-driven />',它們已經與Spring綁定了。 – 2013-06-04 16:54:35

+0

是的,但在單獨的文件中。假設你使用@ Component/@ Service/etc註釋你的bean。這意味着你的所有類在Spring Framework上都有'import'(編譯時)依賴關係。你仍然會有你的XML配置。 (續) – 2013-06-05 14:51:37

4

這是我剛剛作出了一個簡單的例子:

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

} 

這是完全基於Spring註釋和Spring框架4.2.5

希望它有助於而成。