Spring 组件注册之注解@Configuration和@Bean

导语

前些天,以为刚接触Spring的朋友,问我她代码中的@Bean("XXX")中的这个“XXX”怎么和bean 的名字怎么不一样,然后我就想着是不是该写一下这类博客。其实说到这里我要说一下她当时写的代码是在一个类中使用了@Configuration注解标注的,然后方法上标注了@Bean注解,此时如果对Spring比较熟悉的应该就知道我所说的是什么了。

是的,她所做的就是再写一个配置类,那么配置类是什么呢?它的前身又是什么呢?其实@Configuration注解在Spring 3.0版本的时候就已经提供功能了。今天这里暂且不说这些Spring的历史,笔者简单的以Spring的XML配置文件和注解的方式来对比一下。在开始之前先放一张图(图片是哪位朋友问问题时的截图)和一段代码(代码是@Configuration注解的简单代码),如下:

/**
 * Indicates that a class declares one or more {@link Bean @Bean} methods and
 * @author Rod Johnson
 * @author Chris Beams
 * @author Juergen Hoeller
 * @since 3.0
 * @see Bean
 * @see Profile
 * @see Import
 * @see ImportResource
 * @see ComponentScan
 * @see Lazy
 * @see PropertySource
 * @see AnnotationConfigApplicationContext
 * @see ConfigurationClassPostProcessor
 * @see org.springframework.core.env.Environment
 * @see org.springframework.test.context.ContextConfiguration
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {

	@AliasFor(annotation = Component.class)
	String value() default "";
	........  
}

一、XML配置文件的实现方式

在以前的XML配置文件中,我们所实现的方式就是使用<bean/>标签的方式来实现的,不多说直接上代码:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="person" class="com.pat.bean.Person">
        <property name="id" value="1"/>
        <property name="name" value="不才人"/>
        <property name="age" value="26"/>
    </bean>
</beans>

public class Person {
    private Integer id;
    private String name;
    private int age;

    // 此处省略一万行代码
}

从上面的代码可以看出,在实体类中所定义的属性在XML配置文件中是以<property/>标签来体现的。继续看下测试代码:

public class MainTest {

    public static void main(String[] args) {
        // 配置文件测试方式
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-bean.xml");
        Person person = applicationContext.getBean(Person.class);
        System.out.println(person);
    }
}

这段代码就是先冲类路径下获取spring-bean.xml配置文件,然后获取Person对象,最后打印,这貌似没什么可说的,那就来说下本次的重点@Configuration注解吧。

二、@Configuration注解

在当前这个Spring Boot横行的时代,@Configuration注解的使用已经是家常便饭的事情了,一些一开始没接触过Spring的朋友,可能对一些注解和使用方式可能一脸懵逼,因为Spring Boot的的基础是Spring,那么就先说下@Configuration注解的前身?不急,先来看下代码:

@Configuration
public class PersonConfig {
    @Bean
    public Person person(){
        return new Person(2, "浪随客", 27);
    }
}

这代码是不是和前面一开始的图片中的代码使用很相似?是的,这就是一个demo,我们先看下这里和XML中的是不是感觉又那么一丝丝相似,是的,其实最后都会打印出Person实体对象的信息,也就是说标注了@Configuration注解的类就是一个配置类,也就和XML中的<beans/> 标签的作用是一样的,在这个里面PersonConfig 类中,我们也可以使用多个@Bean注解来标注出多个实体对象。就像<beans/>标签中可以有多个<bean/>标签一样。

其实在上面的XML的方式中所说到的<bean/>标签中的id属性就是用来声明这个对象的名称的,不信可以自己试试(代码路径最后会贴出来),说到这里就要说到配置类中的对象名称是什么了,在@Bean注解没标注任何信息的时候,方法名称就是当前返回对象的名称,如果@Bean("pesron123")是这样写的,那么这里面的“person123”就是类名称了。不信你也可以试试。最后还是特一下这个使用方式的测试方法,代码如下:

public class MainTest {

    public static void main(String[] args) {
//        // 配置文件测试方式
//        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-bean.xml");
//        Person person = applicationContext.getBean(Person.class);
        // @Configuration配置类测试方式
        AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(PersonConfig.class);
        Person person = annotationConfigApplicationContext.getBean(Person.class);
        System.out.println(person);
    }
}
 

总结

本次文章,主要说了一下几点:

1.列举了XML配置文件的使用方式和@Configuration注解的使用方式

2.对两者进行了一下对比

3.说了一下@Bean的使用

 

代码:https://github.com/zfy-zhang/spring-annotation

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值