(五)java深入java虚拟机及大数据笔记库(62)

  一 .   构造方法注入和设值注入有什么区别?


1 ) .   设值转入方法支持大部分的依赖注入, 若我们仅需int,string和long型的变量,则不用设值的方法注入;对于基本类型,若我们没有注入的话,可以作为基本类型设值默认值

        在 构造方法注入不支持大部分的依赖注入 ,因为在调用构造方法中必须传入正确的构造参数,否则的话为报错

2 ) . 设 值注入不会重写构造方法的值, 若我们对同一个变量同时使用了构造方法注入又使用了设值方法注入的话,那么构 造方法将不能覆盖由设值方法注入的值, 因为构造方法尽在对象被创建时调用

3 ) . 在使 用设值注入时有可能还不能保证某种依赖是否已经注入, 也就是说对象的依赖关系有可能是不完整的,而在另一种情况下, 构造器注入则不允许生成依赖关系不完整的对象

4 ) . 在设值注入时若对象A和对象B互相依赖,在创建对象A时Spring会抛出SobjectCurrentlyInCreationException异常,因为在B对象被创建之前A对象是不能被创建的,反之亦然,因此s pring用设值注入的方法解决了循环依赖的问题,因对象的设置方法是在对象被创建掉用的
 

 
 

       二.    Spring框架中有哪些不同类型的事件?


1 ) .  ApplicationContext

1.1 简述  : Spring的ApplicationContext提供了支持事件和代码中监听器的功能  

1.2  做法 : 我们可以通过创建bean来监听ApplicationContext中发布的事件,即ApplicationEvent类和ApplicationContext接口中处理的事件,

1.3  呈现 :  若一个bean实现了ApplicationLiostener接口,当一个ApplicationEvent被发布以后,bean会自动被通知

1.4 代码 : 


public class AllApplicationEventListener implements ApplicationListener<ApplicationEvent  >{

        @override
        public void onApplicationEvent(ApplicationEvent applicationEvent){

        //provess event

        }

}



2 ) . Spring提供了以下五种标准的事件  :

2.1 上下文更新事件(ContextRefreshedEvent) --> 该事件会在ApplicationContext被初始化或者更新时发布,也可在调用ConfigurableApplicationContext接口中的refresh()方法时被触发

2.2上下文开始事件(ContextStartedEvent)-->当容器调用ConfigurableApplicationContext的Start()方法开始/重新开始容器时触发该事件

2.3 上下文停止事件(ContextStoppedEvent)-->当容器调用ConfigurableApplication的Stop()方法停止容器时触发该事件

2.4 上下文关闭事件(ContextClosedEvent)-->当ApplicationContext被关闭时触发该事件,容器被关闭时,其管理的所有单例Bean都被销毁

2.5 请求处理事件(RequestHandledEvent)-->在Web应用中,当一个http请求(request)结束触发该事件


3 ) . 自定义事件-->通过扩展ApplicationEvent类来开发自定义事件


public class CustomApplicationEvent extedns ApplicationEvent{

     public CustomApplicationEvent(Object source,final String msg){

     super(source);

     System.out.println("Created a Cutom event");

    }

}




为监听此事件,创建一个监听器


public class CustomEventListener implements ApplicationListener<CustomApplicationEvent>{

@override
public void onApplicationEvent(CustomApplicationEvent applicationEvent){

//handle event

}


}


之后通过ApplicationContext接口的publishEvent()方法来发布自定义事件


CustomApplicationEvent customEvent=new CustomApplicationEvent(applicationContext,"Test message");

applicationContext.publishEvent(customEvent);

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值