发表于: 2018-03-23 23:23:03
1 608
今日完成:
1. Spring init-method和destroy-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容器在什么时候关闭呢?在基于Web的ApplicationContext实现中,系统已经提供了相应的代码保证关闭Web应用时恰当的关闭Spring容器。但对于一个非Web应用的环境下,为了让Spring容器优雅的关闭,并自动调用singleton上的相应回调方法,则需要在JVM里面注册一个关闭钩子(shutdown hook),这样就可以保证Spring容器被恰当关闭,并自动执行singleton的Bean里面的相应回调方法。
5. 数据库连接池使用destroy-method=”close”;
容器关闭时关闭数据库连接,不占用mysql的链接
<!--设置数据源c3p0-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
明日计划:
1. 上午:配置任务6数据库,mybatis,spring,springmvc等基础框架
3. 晚上:短信验证优化
<p style="margin: 0 0 10px 24px" "="">4. 有时间弄邮箱
遇到的问题:
1. 如何销毁一个bean
收获:
1. 解决了destroy-method="stop"这个方法的作用的理解,填了个坑
2. 需要规划一下每天的时间,合理分配
评论