您的位置:老铁SEO > 站长新闻 > 网站交易 >

bean,Spring定义Bean的两种方式:和@Bean

文章来源:http://www.6cu.com

作者:外链网站

人气:17

2021-03-23 03:03:57

     Spring中最重要的概念IOC和AOP,实际围绕的就是Bean的生成与使用。

     什么叫做Bean呢?我们可以理解成对象,每一个你想交给Spring去托管的对象都可以称之为Bean。

     1.通过XML的方式来生成一个bean

     最简单也是最原始的一种方式,通过XML来定义一个bean,我们来看下其过程:

     1)创建entity,命名为Student

     2)在beans.xml中定义Student

     总结:可以看到,创建bean的方式多种多样,我们可以通过属性来赋值<property>,也可以通过构造参数来赋值<constructor>,关于构造赋值以上展示了三种方式,我们可以根据自己的需求来选择对应的方式。

     3)测试bean

     2.<bean>标签深入了解

     我们刚才介绍了最基本的Bean使用方式,大家会发现<bean>标签还有其他的属性,比如name/scope/lazy-init/init-method/...等,这些是做什么用的呢?我们在实际的工作中怎么使用呢?

     1)name属性

     在介绍name属性之前,我们先来看下ApplicationContext.getBean()的两种方式:

     * ApplicationContext.getBean(String name)

     * ApplicationContext.getBean(Class<T> requiredType)

     第一种方式的这个name是什么呢?我们应该如何定义,又该如何使用呢?

      * 根据Class来获取这种方式很好理解,这个不关心你定义的id或者name是什么,使用如下:

     Student studentNoValue = (Student) applicationContext.getBean(Student.class);  

     2)scope属性

     可以看到,在使用scope属性的时候,提示有两种输入值,分别是singleton/prototype。 这个就代表了Spring-Bean的两种创建模式,单例模式和原型模式。

     * Spring默认使用单例模式来创建Bean,通过ApplicationContext所获得的bean都是同一个bean(在beanName相同的情况下),我们可以来验证下:

     可以看到的是结果输入为true,从工厂类中两次获取的stuName是同一个对象。

     * 下面来验证下原型模式:

     原型模式:每次获取的bean都为一个新的对象。

     可以看到,输出结果为false,原型模式下从工厂类两次获取的stuName不是同一个对象。

      3)init-method和destroy-method方法

     见名知意,init-method应该是初始化方法的意思,destroy-method应该是销毁方法的意思。那怎么使用呢?

     总结:在获取bean的时候init()方法被执行,在容器被销毁的时候,执行了destroy()方法。

     根据这个,我们可以在初始化bean和销毁bean的时候做点什么,比如关闭连接,保存记录之类的操作。

     延伸:那么初始化init()方法在构造方法之前调用,还是之后调用呢?读者可以自行验证下。

     总结:还有一些其他属性,笔者就不再一一验证了,下面说一下通过JavaConfig的方法来实现bean的定义。

     3.JavaConfig方式的bean定义

     JavaConfig是Spring4.x推荐的配置方式,可以完全替代XML的方式定义。

     1)如何定义一个Bean

     相对于XML的使用方式而言,JavaConfig的使用方式基本是同步的。

     * @Configuration等同于<beans></beans>

     * @Bean等同于<bean></bean>

     * 通过AnnotationConfigApplicationContext来加载JavaConfig

     * 方法名student()就等同于<bean>中的id,默认方法名就是beanName

     2)@Bean的其他参数

     * name属性等同于<bean>的name

     * initMethod属性等同于<bean>的init-method

     * destroyMethod属性等同于<bean>的destroy-method

     * scope这个比较奇怪,不属于@Bean的参数,这是一个单独的注解,使用方式如下:

     原文链接:https://blog.csdn.net/qq_26323323/article/details/89761303


上一篇:group by,Group by的使用

下一篇:没有了

相关文章

在线客服

外链咨询

扫码加我微信

微信:juxia_com

返回顶部