java Spring @Configuration bean的产生

从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"));
	}
}

参考:https://www.cnblogs.com/duanxz/p/7493276.html

猜你喜欢

转载自blog.csdn.net/wantsToBeASinger/article/details/86654644