1、Bean的初始化和销毁
(1)、java配置方式:使用@Bean的initMethod和destroyMethod(相当于XML配置的init-method和destory-method)
(2)、注解方式,利用jsr250标准的@PostConstruct和@PreDestory
2、事件
spring的事件,为bean和bean之间的消息通信提供了支持
当一个bean处理完任务之后,希望另外一个bean知道并能够做相应的处理
(1)、自定义事件,继承ApplicationEvent
(2)、定义事件监听器,实现ApplicationListener
(3)、使用容器发布事件
其中@EventListener注解就是监听的到之后要执行的方法,@Order注解表示多个监听器时执行的顺序
3、spring Aware
BeanNameAware:获得到容器Bean的名称
BeanFactoryAware:获得当前bean factory,这样可以调用容器的服务
ApplicationContextAware:当前的application context 这样可以调用容器的服务
MessageSourceAware:获得MessageSource,这样可以获得文本信息
ApplicationEventPublisherAware:应用事件发布器,可以发布事件
ResourceLoaderAware:获得资源加载器,可以获得外部资源文件
spring Aware的目的就是为了让Bean获得spring容器的服务,因为ApplicationContext接口集成了MessageSource接口、ApplicationEventPublisher接口和ResourceLoader接口,所以Bean继承了ApplicationContextAware可以获得spring容器所有的服务,但是原则上,我们还是需要用到什么接口,就实现什么接口
4、多线程
spring通过任务执行器(TaskExecutor)来实现多线程和并发编程,使用ThreadPoolTaskExecutor可实现一个基于线程池的TaskExecutor,而实际开发中任务一般是非阻碍的,即异步的,所以我们要在配置类中通过@EnableAsync开启对于异步任务的支持,并通过实际执行的Bean的方法中使用@Async注解,来声明其是一个异步任务
上代码说明:
通过@Async注解表明该方法是个异步方法,如果这个注解放在类上,则这个类中所有的方法都是异步方法
5、计划任务
配置中添加@EnableScheduling注解,表示开启计划任务
方法中添加@Scheduled注解表示这个方法是计划任务,其中fixedRate属性,表示每隔固定的事件执行,也可以用cron属性,按照制定的时间表达式执行