1 spring helloworld:
applicationContext.xml:
<bean id="HelloWorld" class="com.javalong.spring.day01.HelloWorld">
<property name="name" value="ygh"></property>
</bean>
Bean:
public class HelloWorld {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void sayHello(){
System.out.println("hello :"+name);
}
}
Test:
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
HelloWorld hello=(HelloWorld)context.getBean("HelloWorld");
hello.sayHello();
}
Out:
hello :ygh
上面就是简单的spring的helloworld。
在上面bean中用setter方式注入了一个name属性,所以一定要提供set方法,不然的话会报错 Error setting property values;
下面我们试试用构造器注入的方式。
applicationContext.xml:
<bean id="HelloWorld" class="com.javalong.spring.day01.HelloWorld">
<property name="name" value="ygh"></property>
</bean>中把<property name="name" value="ygh"></property>
改为<constructor-argindex="0"value="ygh"/>
Index 代表是构造器中的第几个参数,后面value是值。
所以我们肯定还要添加个构造器:
public HelloWorld(String name){
this.name=name;
}
2 配置文件bean的基本属性
Scope(范围):
Scope 范围值有好多,这边介绍最重要的2个singleton和prototype
Singleton是单例,
Prototype,是每次获取bean都得到一个新的对象。
<bean id="HelloWorld" class="com.javalong.spring.day01.HelloWorld" scope="prototype">
</bean>
我现在将<constructor-argindex="0"value="ygh"/>去掉,结果报错了,因为刚才我创建了一个有参的构造函数,所以默认的无参构造函数就不存在了。
Scope=prototype,所以是每次getBean都是新的对象,
Test:
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
HelloWorld hello1=(HelloWorld)context.getBean("HelloWorld");
HelloWorld hello2=(HelloWorld)context.getBean("HelloWorld");
System.out.println(hello1==hello2);
Out:
False
说明2个对象是不相同的。
当scope=singleton或者不写的时候(默认为singleton),那么输出为true,这里就不演示了。
Lazy-init(是否懒加载)
我们可以在构造函数中加输出,看什么时候调用。
当scope为singleton时,
Test:
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
Out:
构造函数调用
当scope为prototype时,
则为getBean时调用构造函数。
Lazy-init 这个参数就是希望在要用到这个类的时候,你帮我初始化下,所以对prototype来说并不存在提早初始化的问题,所以lazy-init是对于scope=singleton来说的。当然scope还有其他值,这里先不提。Lazy-init=true后 scope=singleton,getBean时才会创建对象。
Init-method:
Destory-method:
看名字就知道,是初始化方法,和销毁方法。
值为希望调用的方法名。
这里需要指出的是 destory-method只对scope=singleton有效。
Test:
AbstractApplicationContext
context=new ClassPathXmlApplicationContext("applicationContext.xml");
HelloWorld hello1=(HelloWorld)context.getBean("HelloWorld");
context.close();
Scope=prototype
Out:
构造函数调用
初始化方法
Scope=singleton
Out:
构造函数调用
初始化方法
销毁方法
===========================================================》(未完待续)