java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring Bean配置方式

Spring Bean配置方式总结

作者:是只菜鸟呀

定义Spring Bcan的3种方式分别是:基于XML 的方式配置、基于注解扫播方式配置、基于元数据类的配置,本文就通过代码示例给大家详细讲讲这三种配置方式,需要的朋友可以参考下

SpringBean是Spring中最基本的组成单元,Spring 官方文档对 Bean 的解释是这样的:

In Spring, the objects that form the backbone of your application and that are managed by theSpring loC container are called beans. A bean is an object that is instantiated, assembled, and managedby a Spring IoC container.

翻译过来就是:

在Spring中,构成应用程序主并由SpringIoC容器管理的对象被称为Bean。Bean是一个由SpringIoC容器实例化、组装和管理的对象。

从官方定义中,我们可以提取出以下信息

1)Bean 是对象,一个或者多个不限定

2)Bean 托管在Spring 中一个叫作IoC的容器中

3)我们的程序是由一个个 Bean 构成的。

Spring 是通过声明式配置的方式来定义 Bean的,所有创建Bean需要的前置依赖或者参数都通过配置文件先声明,Spring 启动以后会解析这些声明好的配置内容。

那么,我们该如何定义Spring 中的 Bean呢?一般来说,Spring Bean的定义配置有3种方法。

1基于XML的方式配置,这种配置方式主要适用于以下两类场景

(1)Bean 实现类来自第三方类库,比如 DataSource 等。

(2)需要定义命名空间的配置,如 context、aop、mvc等。

举个例子,来看一段代码。

<beans>
    <import resource="resource1.xml"/>//导入其他配置文件Bean 的定义
    <import resource="resource2,xmI" />
        <bean id="userService" class="com.gp.s.UserService" init-method="init" destory-method="destory">
        </bean>
        <bean id="message”class="java.lang.String">
            <constructor-arg index="o" value="test"></constructor-arg>
        </bean>
</beans>

这段代码是标准的 Spring 配置内容,首先导入一个叫作 resourcel.xm标准配置文件。然后,导入第二个标准配置文件resource2.xml。接着,定义一个叫作 userService的 Bean,对应的类是 com.gp.s.UserService,并且声明了在userService 实例化之后要用init0方法,在userService 销毁之后调用destory0方法。

2基于注解扫描的方式配置,这种配置方式主要适用于开发中需要引用的类,如ControleService、Dao等,配置代码如下。

<context:component-scan base-package="com.gp.s">
    <!-- 包含的目标类-->
    <context:include-filter type="regex” expression="com.gp.s.mall.*"/>
    <!-- 排除的目标类-->
    <context;exclude-filter type="aspectj"
                    expression="com.gp.s.mall.*Controller+"/>
</context:component-scan>

在这段配置中,context:component-scan 相当于使用了 Spring 内置的扫描注解的组@ComponentScan ,声明了需要扫描的基础包路 com.gp.s ,把所有com.gp.s.mall 下面的子包全部纳入扫描范围,并且排除了 com.gp.s.mall包面所有以Controller 结尾或者包含 Controller 结尾的类
使用 Spring 容器管理组件的 beanName 规则,默认是类名首字母变小写,可以自己修改。

Spring 主要提供了 4 种内置的注解来声明 Bean。它们分别是

@Controller (声明为控制层组件的Bean)、

@Service (声明为业务逻辑层组件的 Bcan)、

@Repository (声明为数据访间层组件的当对组件的层次难以定位的时候使用

@Component 注解来声明。Bean)

Spring 提供了4个注解,这些注解的作用与XML定义 Bean 的作用一样,都是将组件交给Spring 容器管理。组件的名称默认是类名 (首字母变小写),可以自己修改。

3基于Java类的配置,这种配置方式主要适用于以下两类场景。

(1)需要通过代码控制对象创建逻辑的场景。

(2)实现零配置,消除XML 配置文件的场景

同样还是举个例子,来看一段代码:

@Configurationpublic 
class BeansConfiguration {
    @Bean
    public Student student(){
        Student student = new Student();student.setName("三");
        student.setTeacher(teacher());
        return student;
    }
    @Bean
    public Teacher teacher(){
        Teacher teacher= new Teacher();
        teacher.setName("Tom");
        return teacher;
    }
}

通过分析这段代码,可以了解到使用基于类的配置需要以下步骤。

1)在 BeansConfiguration 类上配置@Configuration 注解,表示将 BeansConfiguration 类定义为Bean的元数据。

2)在方法上使用@Bean 注解,方法名默认就是 Bean 的名称,方法返回值就是 Bean 的实例

3)过AmnolationConfgApplicationContext 或子类来启动 Spring 容器,从而加载这些已声明好的注解配置。

总结一下,定义 Spring Bcan 的3 种方式分别是:基于XML 的方式配置、基于注解扫播方式配置、基于元数据类的配置。

那么Bcan 的配置定义好以后,Spring 又是如何加载这些 Bean 配置并创建 Bean 实例的哪:

Spring 解析这些声明好的配置内容,将这些配置内容都转化为 BeanDefinition 对多BeanDefinilion 中几平保存了配置文件中声明的所有内容,再将 BeanDefinition 保存bcanDcfinitionMap中,以beanName 作为key,以BeanDefinition 对象作为value。之后,Spring容器根据 beanName找到对应的 BeanDefinition,再去选择具体的创建策略。

以上就是Spring Bean配置方式总结的详细内容,更多关于Spring Bean配置方式的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文