你的位置:首页 > 软件开发 > Java > JavaEE开发之Spring中Bean的作用域、Init和Destroy方法以及Spring

JavaEE开发之Spring中Bean的作用域、Init和Destroy方法以及Spring

发布时间:2017-03-28 12:00:29
上篇博客我们聊了《JavaEE开发之Spring中的依赖注入以及AOP》,本篇博客我们就来聊一下Spring框架中的Bean的作用域以及Bean的Init和Destroy方法,然后在聊一下Spring中的EL表达式。在Spring框架中我们可以使用@Scope注解来指定我们定义的 ...

上篇博客我们聊了《JavaEE开发之Spring中的依赖注入以及AOP》,本篇博客我们就来聊一下Spring框架中的Bean的作用域以及Bean的Init和Destroy方法,然后在聊一下Spring中的EL表达式。在Spring框架中我们可以使用@Scope注解来指定我们定义的Bean的作用域。下方会具体介绍几种参数的作用域。

在创建Bean时我们可以使用Java配置的方式,也就是@Bean注解的initMethod属性和destroyMethod属性来指定对应Bean的init()方法和destroy()方法。当然,除了Java配置的方式,我们还可以使用JSR-250的注解形式为相应的Bean来指定Init和Destroy方法。其中主要使用到了@PostContruct注解来指定构造器执行完就执行的方法,使用@PreDestroy注解来指定Bean对象销毁之前执行的方法。下方会具体给出相应的实现。

本篇博客我们还会聊一下Spring框架中的EL表达式,其实主要还是使用@Value注解。@Value注解可以给据其指定的参数以及所赋值的属性的类型来为相应的对象的属性进行赋值。我们可以使用@Value注解为属性赋常规值、URI资源、文件资源、系统属性、其他类对象的属性等。具体下方会给出相应的实现。

 

一、Bean的作用域

接下来我们将聊一下Bean的作用域。在使用@Repository、@Controller、@Service、@Component这些注解声明Bean时,我们可以使用@Scope来指定相关Bean的作用域。@Scope后边可以跟不同的参数,根据这些参数来设定Bean的作用域。@Scope可以跟下方的几个参数:

  • Singleton: 单例Bean,当我们需要将一个Bean的作用域声明为单例时,我们可以使用Singleton来将相应的类声明为单例。Bean默认的Scope就是单例形式的。
  • Prototype:与单例相反,每次通过上下文获取的都是一个新的对象。
  • Session:Web Project中使用,同一session会话中为同一个对象。
  • Request:Web Project中使用,每次HTTP请求都会新建一个Bean。
  • GlobalSession: 在portal应用中有用,给每个global http session新建一个Bean实例。

本篇博客不是基于Web Project的,所以我们只讨论Singleton和Prototype这两个作用域。首先我们创建一个Scope为Singleton的Service,如下所示。然后我们再创建一个Scope为Prototype的Service,当然只把下方的singleton换成prototype即可。

  JavaEE开发之Spring中Bean的作用域、Init和Destroy方法以及Spring

 

创建好相应的Bean后,接下来我们就可以在Main方法中进行测试了。下方就是我们的Main函数中的内容以及该Main函数所运行的输出结果。在Main函数中,我们分别从Spring的上下文中获取两个Singleton以及Prototype作用域对象。然后分别打印出每个对象的hashCode,从下方结果中我们可以看出,两个Singleton的对象的hashCode是相同的,这就说明这两个对象是一个对象。而Prototype的两个对象的hashCode是不同的,具体结果如下所示:

  JavaEE开发之Spring中Bean的作用域、Init和Destroy方法以及Spring

 

 

二、Bean的Init与Destroy

原标题:JavaEE开发之Spring中Bean的作用域、Init和Destroy方法以及Spring

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。