Bootstrap

java static spring_static关键字,引发的spring普通类获取spring的bean的思考

在c++和java中static关键字用于修饰静态成员变量和成员函数

举例一个普通的javabean

classAA

{inta;static intb;

geta/seta;//此处省略getset

getb/setb;

}

如果创建了一个对象AA,

AA a =new AA();

这个时候只会在内存中给这个对象分配四个字节,也就是a变量所占的字节数,因为static申明的全局变量在全局区中,是所有这个类的对象共有的,例如:

a.setB(10);

AA b=newA();

System.out.println(b.getB());

发现结果是10;

也就证实了,static申明的关键字是所有对象共有。

这也解释了,为什么静态函数只可以使用静态变量的原因了,因为静态函数也是所有类共有的,在编译器编译的时候不会将该类的引用传递到这个方法中,

所以静态函数不知道是哪个对象调用了我这个方法。

那么普通的函数存在哪里呢,为什么对象调用这个方法的时候,函数知道是哪个对象调用我的呢?

因为普通的成员变量和方法在编译器编译的时候,会帮我们做了转化。

还是上面的类,在编译的时候,编译器会将类变成:

classAA

{inta;public void setA(AA *ac,inta)

{

ac->a=a;

}

}

会将当前类的地址传递过来,修改该对象a的值。(上面代码是c++实现的,我认为java底层也是这样实现的)

调用静态static函数的方式在java中包括(java)

1类名.static方法();

2对象.static方法();

普通java类获取spring容器的类的方法:

public class SpringConfigTool implementsApplicationContextAware{private staticApplicationContext applicationContext;

@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throwsBeansException {this.applicationContext=applicationContext;

}public staticApplicationContext getApplicationContext() {returnapplicationContext;

}

}

这会在spring容器运行的时候,将spring上下文对象设置到我们自定义的SpringConfigTool的全局变量中,而上面我们得知:全局变量是所有类公用的,

所以我们可以直接使用SpringConfigTool.getBean("beanName");或者new一个对象调用getBean都可以获取到spring对应的bean

;