Spring中@Configuration的使用
一、@Configuration的作用类似于配置一个spring-bean.xml中的<beans></beans>标签的作用,主要用于Bean的注入,放置在类上。使用该注解注入Bean后,获取IOC容器的方式不再使用ClassPathXmlApplicationContext或者文件系统路径来获取对应的IOC容器,而是使用Annotatio
一、@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
更多推荐
所有评论(0)