从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
使用@Configuration,意味着对于简单的情况,不需要xml。
1.@Configuration标注在类上,相当于把该类作为spring的xml配置文件中的<beans>
,作用为:配置spring容器(应用上下文)
package com.arvin.spring.config;
//相当于xml中的<beans>,作用为:配置spring容器(应用上下文)
@Configuration
public class SpringConfiguration {
public SpringConfiguration() {
System.out.println("Spring 容器初始化");
}
}
2.注册Bean
Bean类:
package com.arvin.spring.bean;
@Data
public class PersonBean {
private Long id;
private String name;
public void say() {
System.out.println("Hello world");
}
public void born() {
System.out.println("born in "+new DateTime().toString("HH:mm:ss"));
}
public void die() {
System.out.println("die in "+new DateTime().toString("HH:mm:ss"));
}
}
配置类:
package com.arvin.spring.config;
//相当于xml中的<beans>,作用为:配置spring容器(应用上下文)
@Configuration
public class SpringConfiguration {
public SpringConfiguration() {
System.out.println("Spring 容器初始化");
}
//@Scope(value="propotype")//spring默认单例,可以使用@Scope注解设为原型
//相当于<bean>,可以指定别名、初始化和销毁
@Bean(initMethod="born",destroyMethod="die")
public PersonBean personBean() {
//真实返回的类
return new PersonBean();
}
}
测试:
package com.arvin.spring;
public class TestMain {
public static void main(String[] args) {
//@Configuration注解的spring容器加载方式,用AnnotationConfigApplicationContext替换ClassPathXmlApplicationContext
ApplicationContext annotationConfigApplicationContext
= new AnnotationConfigApplicationContext(SpringConfiguration.class);
beanName默认为方法名
PersonBean personBean = (PersonBean) annotationConfigApplicationContext.getBean("personBean");
System.out.println(personBean);//PersonBean(id=null, name=null)
}
}
或者使用@ComponentScan和@Component扫描注册Bean
package com.arvin.spring.config;
//相当于xml中的<beans>,作用为:配置spring容器(应用上下文)
@Configuration
//相当于<context:component-scan base-package="com.wangrong.spring.bean"/>
@ComponentScan(basePackages="com.arvin.spring.bean")
public class SpringConfiguration {
public SpringConfiguration() {
System.out.println("Spring 容器初始化");
}
}
package com.arvin.spring.bean;
@Data
@Component
public class PersonBean implements Person{
private Long id;
private String name;
public void say() {
System.out.println("Hello world");
}
public void born() {
System.out.println("born in "+new DateTime().toString("HH:mm:ss"));
}
public void die() {
System.out.println("die in "+new DateTime().toString("HH:mm:ss"));
}
}