Spring 与组件注入相关的注解之 @Configuration 和 @Bean

11 篇文章 0 订阅
11 篇文章 0 订阅
准备工作:
  1. 在 eclipse 或者 IDEA 中,新建一个 maven 项目。在 pom.xml 中添加 spring-context 和 junit 依赖:
	<dependency>
 			<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>5.1.5.RELEASE<ersion>
	</dependency>
	
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.12<ersion>
		<scope>test</scope>
	</dependency>
  1. 顺便补充下,我在实际开发时的顺序一般是:pom.xml(添加相关依赖)–> xxx.properties(配置文件) --> 各个package/class的开发,毕竟现在很提倡约定 > 配置 > 开发!
简单回顾下之前基于各种 beans.xml 的开发形式:
  1. 新建 Person 实体类:两个属性 + setter/getter + toString
	private String name;
	private int age;
  1. 在 src/main/resources 下,右键 new -> 选择 Spring Bean Configuration File(如果找不到的话,在 new -> other 中搜索 spring,如下图所示),新建 beans.xml。
    在这里插入图片描述
    以前就是这种 xml 中进行各种 bean 的注入的,例如实体类,数据源,还会进行事务的管理,AOP的配置等等。这里重点不是这种 xml,因此对其不作过多介绍。
	<?xml version="1.0" encoding="UTF-8"?>
	<beans xmlns="http://www.springframework.org/schema/beans"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xmlns:context="http://www.springframework.org/schema/context"
		xmlns:tx="http://www.springframework.org/schema/tx"
		xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
			http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
			http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
		
		<bean id="person" class="com.uestc.auto.xiaoxie.bean.Person">
			<property name="age" value="23"></property>
			<property name="name" value="Karolina"></property>
		</bean>
	</beans>
  1. 新建测试类,测试上面那个 id 为 person 的 bean 的获取:
	@Test
	public void test1(){
		// spring 上下文: ApplicationContext,这个用的是 ApplicationContext 的子类
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:/beans.xml");
		// 通过 id 来获取 bean
		Person person = (Person) context.getBean(“person");
		System.out.println(person);
		context.close();
	}

下图所示为 ApplicationContext 的层级关系图:
在这里插入图片描述

基于 @Configuration 和 @Bean 注解
  1. 从Spring3.0,@Configuration 注解用于定义配置类,可替换 xml 配置文件。被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会 被AnnotationConfigApplicationContext 或 AnnotationConfigWebApplicationContext 类进行扫描,并用于构建bean的定义,初始化Spring容器。
    但是,有人说“在基于注解的 spring 开发中,跟 xml 配置文件对应的就是 @Configuration 标识的配置类”。这句话我觉得说的有点漏洞!!!因为我后面测试了一下,配置类上不加 @Configuration 注解,直接使用 @Bean,“竟然”也是可以成功注入以及获取 bean 的。 其实,这里想探讨的问题是:@Bean 注解是否一定要与 @Configuration 注解一起使用(目前测试的效果是不需要),在后续博客中将会作深入研究!!!

  2. 我们可以新建一个类,名称为:SpringConfig1.java,并定义一个用 @Bean 注解修饰的方法:方法的返回值就是要注入容器中的组件的类型,方法名就是要注入到容器中的组件的 id。

@Configuration // 通过这个注解标识这是一个Spring配置类
public class SpringConfig1{

	/*
	 * 定义一个方法,通过@Bean注解向Spring IOC容器注入一个组件:
	 * 	   组件的类型就是方法返回值的类型;
	 * 	   组件的id默认为方法名,可以通过@Bean的value属性修改id,如@Bean(value="person11") 
	 */
	@Bean(value="person11") 
	public Person person(){
		return new Person("kristina", 24);
	}
}

(上面这段代码的作用就等价于 beans.xml)

  1. 编写测试类,测试上面那个 id 为 person11 的 bean 的获取:
@Test
   public void testAnnotation(){
   	// 1.通过配置文件的形式
//		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:/beans.xml");
//		Person person = context.getBean(Person.class);
//		System.out.println(person);
   	
   	// 2.通过配置类的形式(就是上面的 SpringConfig1)
   	AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig1.class);
   	Person person = context.getBean(Person.class);
   	System.out.println(person);
   	
   	// 还可以获取容器中所有bean的id,等等
   	String[] names = context.getBeanDefinitionNames();
   	for (String name : names) {
   		System.out.println(name);
   	}
   	
   	context.close();
   }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值