一、@Configuration的作用類似於配置一個spring-bean.xml中的<beans></beans>標籤的作用,主要用於Bean的注入,放置在類上。使用該註解注入Bean後,獲取IOC容器的方式不再使用ClassPathXmlApplicationContext或者文件系統路徑來獲取對應的IOC容器,而是使用
AnnotationConfigApplicationContext(AnnotationConfiguration.class)的方式來獲取IOC容器(AnnotationConfiguration爲自定義的配置類)。
1.1 在自定義的配置類中,注入普通的Bean
//Book類代碼:
public class Book {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Book()
{
System.out.println("Book無參構造器");
}
public Book(String name) {
super();
this.name = name;
System.out.println("有參構造器");
}
@Override
public String toString() {
return "Book--> [name=" + name + "]";
}
}
//自定義的配置類
@Configuration
public class AnnotationConfiguration {
public AnnotationConfiguration() {
System.out.println("初始化");
}
@Bean
public Book book()
{
Book book=new Book();
book.setName("C++");
return book;
}
}
//測試代碼:
AnnotationConfigApplicationContext acac=
new AnnotationConfigApplicationContext(AnnotationConfiguration.class);
Book book=(Book) acac.getBean("book");
System.out.println(book);
執行結果:
@Bean註解放置在配置類中的方法上,該Bean的名字和方法名一致,也可以在@Bean(name=[])修改對應的名字,也可以在@Bean註解中使用destroyMethod,initMethod屬性值來指定對應的初始化方法和銷燬方法
1.2 注入複雜的Bean(一個Bean的屬性,爲該配置類中的另一個Bean)
@Configuration
@Import(AnotherConfiguration.class)
public class AnnotationConfiguration {
public AnnotationConfiguration() {
System.out.println("初始化");
}
@Bean
public Book book()
{
Book book=new Book();
book.setName("C++");
return book;
}
@Bean
public Student student(Book book)
{
Student student=new Student();
student.setBook(book);
return student;
}
}
其他的代碼不再給出(就一個帶Book屬性值的Student類和測試代碼)
重點:若是另一個Bean中需要使用該註解類中的一個Bean,則以方法參數的形式傳入,若是方法的參數名與某一個相應Bean的名字相同,則可以直接注入(不管是否有多個類型相同的Bean),若是沒有與參數名相同的Bean,則按類型注入(只能有一個該類型的值),當有多個時會出現異常(不止一個)
1.3 可以在類上使用@ComponentScan(basePackages=[])註解來掃描對應報下的類,若是相應包下的類上使用了@Controller,@Service,@Component,@Respository註解,則會將該類放入到IOC容器中管理。
1.4 可以在類上使用@Import(Class)把其他的@Configuration配置類進行合併
1.5 @ImportResource("classpath:applicationContext-configuration.xml"):將xml文件中配置的bean,也引用到配置類中,以便在該配置類中使用xml文件中配置好的bean