spring========01_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
3
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3170 | 回复: 2   主题: spring========01        下一篇 
java_along
注册用户
等级:上尉
经验:771
发帖:36
精华:0
注册:2014-2-17
状态:离线
发送短消息息给java_along 加好友    发送短消息息给java_along 发消息
发表于: IP:您无权察看 2014-9-4 11:17:15 | [全部帖] [楼主帖] 楼主

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


上面就是简单的springhelloworld

在上面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;
}


配置文件bean的基本属性

Scope(范围):


Scope 范围值有好多,这边介绍最重要的2singletonprototype

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(是否懒加载)


我们可以在构造函数中加输出,看什么时候调用。

scopesingleton时,

Test:
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
Out:


构造函数调用

scopeprototype时,

则为getBean时调用构造函数。

Lazy-init 这个参数就是希望在要用到这个类的时候,你帮我初始化下,所以对prototype来说并不存在提早初始化的问题,所以lazy-init是对于scope=singleton来说的。当然scope还有其他值,这里先不提。Lazy-init=true后 scope=singletongetBean时才会创建对象。

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:


构造函数调用

初始化方法

销毁方法

===========================================================》(未完待续)




赞(0)    操作        顶端