发表于: 2018-03-23 23:23:03

1 608


今日完成:

1.       Spring init-methoddestroy-method 的使用

bean生命周期:

                                             

Bean可以通过指定属性init-method指定初始化后执行的方法,以及通过指定属性destroy-method销毁时执行的方法。

语法:<bean ....   destroy-method="销毁时调用的方法名" init-method="初始化后执行的方法名"/>

对应的类添加两个方法:

public class Monkey {
   
private String monkeyName = "MonkeyKing";
    public
String toString(){
       
return "MonkeyName: " + monkeyName;
   
}
   
public void start(){
        System.
out.println("monkey start");
   
}
   
public void stop(){
        System.
out.println("monkey stop");
   
}
}

添加到bean中:

<bean id="monkey" name="monkey1" class="org.spring.annotion.Monkey" init-method="start" destroy-method="stop"/>

测试:

public class AppTest {
   
@Test
   
public void test() throws Throwable {
        ApplicationContext ctx =
new ClassPathXmlApplicationContext("applicationContext.xml");
//        Thread.sleep(5000);
       
Zoo zoo = (Zoo) ctx.getBean("zoo");
       
System.out.println(zoo.toString());
       
Monkey monkey = (Monkey) ctx.getBean("monkey");
//        ((ClassPathXmlApplicationContext) ctx).close();
//       
web应用中关闭IoC容器的
       
((ClassPathXmlApplicationContext) ctx).registerShutdownHook();
   
}
}

结果:

2.       spring单例模式

Spring中所谓的单例是指scope="singleton"bean.

单例模式分为饿汉模式和懒汉模式:

饿汉模式 spring singleton的缺省是饿汉模式:启动容器时(即实例化容器时),为所有spring配置文件中定义的bean都生成一个实例

懒汉模式 在第一个请求时才生成一个实例,以后的请求都调用这个实例

spring singleton设置为懒汉模式:<beans default-lazy-init="true">

3.       bean作用域

.Bean的作用域可以通过Bean标签的scope属性进行设置,Bean的作用域包括:

默认情况下scope="singleton",那么该Bean是单例,任何人获取该Bean实例的都为同一个实例;

scope="prototype",任何一个实例都是新的实例;

scope="request",在WEB应用程序中,每一个实例的作用域都为request范围;

scope="session",WEB应用程序中,每一个实例的作用域都为session范围;

注意:在默认情况下,Bean实例在被Spring容器初始化的时候,就会被实例化,默认调用无参数的构造方法。在其它情况下,Bean将会在获取实例的时候才会被实例化。

4.       context.registerShutdownHook(); 是一个钩子方法,当jvm关闭退出的时候会调用这个钩子方法,在设计模式之 模板模式中 通过在抽象类中定义这样的钩子方法由实现类进行实现,这里的实现类是AbstractApplicationContext,这是spring 容器优雅关闭的方法。

singleton作用域的Bean通常会随着容器的关闭而销毁,但问题是:ApplicationContext容器在什么时候关闭呢?在基于WebApplicationContext实现中,系统已经提供了相应的代码保证关闭Web应用时恰当的关闭Spring容器。但对于一个非Web应用的环境下,为了让Spring容器优雅的关闭,并自动调用singleton上的相应回调方法,则需要在JVM里面注册一个关闭钩子(shutdown hook),这样就可以保证Spring容器被恰当关闭,并自动执行singletonBean里面的相应回调方法。

5.       数据库连接池使用destroy-method=”close”;

容器关闭时关闭数据库连接,不占用mysql的链接

<!--设置数据源c3p0-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">

 

明日计划:

1.    上午:配置任务6数据库,mybatisspringspringmvc等基础框架

3.     晚上:短信验证优化

<p style="margin: 0 0 10px 24px" "="">4.     有时间弄邮箱

遇到的问题:

1.       如何销毁一个bean

收获:

1.       解决了destroy-method="stop"这个方法的作用的理解,填了个坑

2.       需要规划一下每天的时间,合理分配



返回列表 返回列表
评论

    分享到