电脑wif怎么搜索不到wif

> spring web启动时spring初始化并实施某个类
spring web启动时spring初始化并实施某个类
langxuyi & &
发布时间: & &
浏览:144 & &
回复:0 & &
悬赏:0.0希赛币
spring web启动时spring初始化并执行某个类
  web启动时spring初始化并执行某个类
  看了好几种方法,还是个这最靠谱了
  @Componentpublic class SysInitBean implements InitializingBean,ServletContextAware{
public void afterPropertiesSet() throws Exception {
//你的初始化代码
}}实现InitializingBean接口就可以获取spring的所有配置信息。实现ServletContextAware,可以获得servletcontext,我这是spring2.5用注释的方式,如果是早期版本,就不能用@Component注解了,直接在xml里配置这个bean就行了,系统自动调用。
  如果是注解方式,则xml也不用配置了。直接用,很爽啊。
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&InitializingBean 接口 与 BeanNameAware
时间: 19:54:32
&&&& 阅读:118
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&最近工作需要得到sping中的每个事物需要执行的sql,称机会简单研究了一下spring的事务,项目中管理事务比较简单,用TransactionTemplate,就直接以TransactionTemplate为入口开始学习。
TransactionTemplate的源码如下:
public class TransactionTemplate extends DefaultTransactionDefinition
&&& &&& implements TransactionOperations, InitializingBean{
&&& &&& ..............
&&& &&& ..............
& & & & ......... ...
TransactionTemplate继承了DefaultTransactionDefinition,实现了TransactionOperations,InitializingBean接口。先研究InitializingBean接口
InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法。
测试程序如下:
import org.springframework.beans.factory.InitializingB
public class TestInitializingBean implements InitializingBean{
&&& @Override
&&& public void afterPropertiesSet() throws Exception {
&&& &&& System.out.println(&ceshi InitializingBean&);&&& &&&&
&&& public void testInit(){
&&& &&& System.out.println(&ceshi init-method&);&&& &&&&
配置文件如下:
&?xml version=&1.0& encoding=&UTF-8&?&
&beans xmlns=&http://www.springframework.org/schema/beans&
&&& xmlns:context=&http://www.springframework.org/schema/context&
&&& xmlns:jdbc=&http://www.springframework.org/schema/jdbc& xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
&&& xmlns:p=&http://www.springframework.org/schema/p& xmlns:aop=&http://www.springframework.org/schema/aop&
&&& xmlns:tx=&http://www.springframework.org/schema/tx&
&&& xsi:schemaLocation=&
&&& http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&&
&&& &bean id=&testInitializingBean& class=&com.TestInitializingBean& &&/bean&
Main主程序如下:
public class Main {
&&& public static void main(String[] args){
&&& &&& ApplicationContext context = new FileSystemXmlApplicationContext(&/src/main/java/com/beans.xml&);
运行Main程序,打印如下结果:
ceshi InitializingBean&&
这说明在spring初始化bean的时候,如果bean实现了InitializingBean接口,会自动调用afterPropertiesSet方法。
问题:实现InitializingBean接口与在配置文件中指定init-method有什么不同?
修改配置文件,加上init-method配置,修改如下:
&?xml version=&1.0& encoding=&UTF-8&?&
&beans xmlns=&http://www.springframework.org/schema/beans&
&&& xmlns:context=&http://www.springframework.org/schema/context&
&&& xmlns:jdbc=&http://www.springframework.org/schema/jdbc& xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
&&& xmlns:p=&http://www.springframework.org/schema/p& xmlns:aop=&http://www.springframework.org/schema/aop&
&&& xmlns:tx=&http://www.springframework.org/schema/tx&
&&& xsi:schemaLocation=&
&&& http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&&
&&& &bean id=&testInitializingBean& class=&com.TestInitializingBean&
init-method=&testInit&&&/bean&
在配置文件中加入init-method=&testInit&。
运行Main程序,打印如下结果:
ceshi InitializingBean
ceshi init-method
由结果可看出,在spring初始化bean的时候,如果该bean是实现了InitializingBean接口,并且同时在配置文件中指定了init-method,系统则是先调用afterPropertiesSet方法,然后在调用init-method中指定的方法。
这方式在spring中是怎么实现的?
通过查看spring的加载bean的源码类(AbstractAutowireCapableBeanFactory)可看出其中奥妙
AbstractAutowireCapableBeanFactory类中的invokeInitMethods讲解的非常清楚,源码如下:
protected void invokeInitMethods(String beanName, final Object bean, RootBeanDefinition
&&& &&& &&& throws Throwable {
//判断该bean是否实现了实现了InitializingBean接口,如果实现了InitializingBean接口,则只掉调用bean的afterPropertiesSet方法
&&& &&& boolean isInitializingBean = (bean instanceof InitializingBean);
&&& &&& if (isInitializingBean && (mbd == null || !mbd.isExternallyManagedInitMethod(&afterPropertiesSet&)))
&&& &&& &&& if (logger.isDebugEnabled()) {
&&& &&& &&& &&& logger.debug(&Invoking afterPropertiesSet() on bean with name ‘& + beanName
+ &‘&);
&&& &&& &&& }
&&& &&& &&&&
&&& &&& &&& if (System.getSecurityManager() != null) {
&&& &&& &&& &&& try {
&&& &&& &&& &&& &&& AccessController.doPrivileged(new PrivilegedExceptionAction&Object&()
&&& &&& &&& &&& &&& &&& public Object run() throws Exception {
&&& &&& &&& &&& &&& &&& &&&
//直接调用afterPropertiesSet
&&& &&& &&& &&& &&& &&& &&& ((InitializingBean) bean).afterPropertiesSet();
&&& &&& &&& &&& &&& &&& &&&
&&& &&& &&& &&& &&& &&& }
&&& &&& &&& &&& &&& },getAccessControlContext());
&&& &&& &&& &&& } catch (PrivilegedActionException pae) {
&&& &&& &&& &&& &&& throw pae.getException();
&&& &&& &&& &&& }
&&& &&& &&& }&&& &&& &&& &&&&
&&& &&& &&& else {
&&& &&& &&& &&&&//直接调用afterPropertiesSet
&&& &&& &&& &&& ((InitializingBean) bean).afterPropertiesSet();
&&& &&& &&& }
&&& &&& if (mbd != null) {
&&& &&& &&& String initMethodName = mbd.getInitMethodName();
&&& &&& &&&&//判断是否指定了init-method方法,如果指定了init-method方法,则再调用制定的init-method
&&& &&& &&& if (initMethodName != null && !(isInitializingBean && &afterPropertiesSet&.equals(initMethodName))
&&& &&& &&& &&& &&& !mbd.isExternallyManagedInitMethod(initMethodName)) {
&&& &&& &&& &&& &&&&//进一步查看该方法的源码,可以发现init-method方法中指定的方法是通过反射实现
&&& &&& &&& &&& invokeCustomInitMethod(beanName, bean, mbd);
&&& &&& &&& }
1:spring为bean提供了两种初始化bean的方式,实现InitializingBean接口,实现afterPropertiesSet方法,或者在配置文件中同过init-method指定,两种方式可以同时使用
2:实现InitializingBean接口是直接调用afterPropertiesSet方法,比通过反射调用init-method指定的方法效率相对来说要高点。但是init-method方式消除了对spring的依赖
3:如果调用afterPropertiesSet方法时出错,则不调用init-method指定的方法。
4:TransactionTemplate实现InitializingBean接口,主要是判断transactionManager是否已经初始化,如果没有则抛出异常。源码如下:
&&&& public void afterPropertiesSet() {
&&& &&& if (this.transactionManager == null) {
&&& &&& &&& throw new IllegalArgumentException(&Property ‘transactionManager‘ is required&);
******************************************************************************************************
如果某个 bean 需要访问配置文件中本身的 id 属性,则可以使用 BeanNameAware 接口,该接口提供了回调本身的能力。实现该接口的 bean,能访问到本身的 id 属性。该接口提供一个方法:voidsetBeanName(String name)。
该方法的 name 参数就是 bean 的 id。该方法在依赖关系设置之后,初始化回调(InitializingBean 的 afterPropertiesSet 方法,或者 init- method 指定的方法)之前被执行。回调 setBeanName 方法可让 bean 获得自己的 id。
迄今为止,所接触到的Bean都是“无知觉”的,就像黑客帝国中机械工厂里面“养殖”的人类,他们虽然能完成一定的功能,但是根本不知道自己在工厂(BeanFactory)中的代号(id),或者自己是在哪个工厂(BeanFactory的引用)中沉睡。所以,本节的目的就是要创造出一个尼奥一样的Bean,让他知道自己在工厂中的id和自己原来躺在哪个工厂中。这里,称之为,Bean对Spring有知觉。
但是有言在先,如果要在Spring容器中做到这两点,当然,可以自己通过某些方法实现,代价是大量冗余代码,好处是跟Spring解耦。如果使用Spring提供的接口,好处当然减少代码的规模,“缺点”(如果算的话)是与 Spring耦合。总之,无论采取那种办法还是要看实际需要。
/////////////////////
让Bean对Name有知觉
/////////////////////
作用:让Bean获取自己在BeanFactory配置中的名字(根据情况是id或者name)。
实现:通过实现BeanNameAware接口,接口中就一个方法setBeanName()
标签:&&&&&&&&&原文:http://blog.csdn.net/hikvision_java_gyh/article/details/
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!Java认证:Spring创建Bean的过程(二)
1. ApplicationContext中的时间处理是通过AppcationEvent类和ApplicationListener接口来提供的。如果上下文中部署了一个实现了ApplicationListener接口的bean,每次一个ApplicationEvent发布到 ApplicationContext时,那个bean就会被通知。实质撒谎功能,这是标准的Observer设计模式。
2. Spring提供的三个标准事件
a. ContextRefreshedEvent
当ApplicationContext已经初始化或刷新后发送的事件。这里初始化意味着:所有的bean被装载,singleton被预实例化,以及ApplicationContext已经准备好。
b. ContextClosedEvent
当使用ApplicationContext的close()方法结束上下文的时候发送的事件。这里意味着:singleton被销毁。
c. RequestHandledEvent
一个与web相关的事件,告诉所有的bean一个HTTP请求已经被响应了(这个时间将会在一个请求结束后被发送—)。注意,这个时间只能应用于使用了Spring的DispatcherServlet的web应用。
=========================================================================================
1. InitializingBean/init-method
实现org.springframework.beans.factory.InitializingBean接口允许一个bean在他的所有必需的属性被BeanFactory设置后,来执行初始化的工作。
当然可以使用init-method来取代实现这个接口,以让应用不与spring产生耦合。
如果一个bean既实现了InitializingBean,又指定了init-method,则spring会先调InitializingBean的方法,在调init-method指定的方法。
2. DisposableBean/destroy-method
实现org.springframework.beans.factory.DisposableBean接口允许一个bean,可以在包含他的BeanFactory销毁的时候得到一个回调。
注意:BeanFactory对bean的管理默认是单实例的,如果bean不是单示例的,spring就不能管理他的生命周期。
本文标题: 本文地址:
一周人气榜君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
Spring中文教程 详细学习及示例整合Hibernate3+Struts2
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 360随身wif怎么用电脑 的文章

 

随机推荐