NGINX编译安装后添加新模块的方法
2014-07-02 18:52
555 查看
最近在看谷歌的guice,看到和spring的stateless和stateful设计有一些不同的地方,随便分析下,想想以后再来看会不会有另外的收获。
谷歌guice:
If the object is stateful, the scoping should be obvious. Per-application is @Singleton, per-request is @RequestScoped, etc. If the object is stateless and inexpensive to create, scoping is unnecessary. Leave the binding unscoped and Guice will create new instances as they're required.
如果这个对象是有状态的,那么它的scope是很明显的。每一个应用程序都是单例的scope,每一个http请求都是一个http请求的scope等等。如果这个对象是无状态的,并且创建不昂贵,scope是没有必要的。给一个绑定不加scope,当一个实例需要的时候,Guice就会自动创建一个。
Singletons are popular in Java applications but they don't provide much value, especially when dependency injection is involved. Although singletons save object creation (and later garbage collection), getting a handle to the single instance requires synchronization. Singletons are most useful for:
单例在java应用程序中非常流行,但是他们没有提供太多的值,尤其是在依赖注入被调用的时候。尽管单例保存了对象创建(然后垃圾回收),获取一个单例的句柄需要同步。单例在以下情况有用。
stateful objects, such as configuration or counters
有状态的对象,例如配置文件和计数器
objects that are expensive to construct or lookup
花费很大的代价来构造或者查找的对象
objects that tie up resources, such as a database connection pool.
连接到外部资源的对象,例如数据库连接池。
spring framework:
As a rule, use the prototype scope for all stateful beans and the singleton scope for stateless beans.
作为一个规则,所有有状态bean用原型的scope,所有没有状态的bean用单例scope。
这中间就有一个冲突,
spring希望把所有的无状态的对象都作为单例,当然也包括那些确实需要单例来完成情况
guice只是希望把那些真正需要单例对象作为单例,其他无状态的对象(可做可不做的)都声明为unscoped。
我觉得这时两家设计哲学的问题。
spring作为一个重量级的依赖注入框架,使得放在spring容器中的bean可以添加后置处理器、消息资源等额外特性。把所有的无状态的类声明为单例bean从而添加这些特性。
而guice作为一个轻量级的依赖注入框架,没有spring那么多的后置处理器、消息资源等东西,它相信大部分人使用对象是“创建它,使用它,然后废弃它(create it, use it and toss it)”,没有必要把所有的对象纳入guice容器管理。如果纳入其中管理,损耗内存,而且拖慢启动速度。
但是这需要使用者有较高的程序素养,就是什么时候真的需要使用单例,一个对象的创建到底花多长时间创建才需要定为单例?没有一个明确的规则,正所谓增加灵活性的同时也增加复杂性。因此guice在这点和spring相比各有千秋。个人觉得gucie适合有修养的程序员,而spring适合绝大部门程序员。
一家之言,还请拍砖。
谷歌guice:
If the object is stateful, the scoping should be obvious. Per-application is @Singleton, per-request is @RequestScoped, etc. If the object is stateless and inexpensive to create, scoping is unnecessary. Leave the binding unscoped and Guice will create new instances as they're required.
如果这个对象是有状态的,那么它的scope是很明显的。每一个应用程序都是单例的scope,每一个http请求都是一个http请求的scope等等。如果这个对象是无状态的,并且创建不昂贵,scope是没有必要的。给一个绑定不加scope,当一个实例需要的时候,Guice就会自动创建一个。
Singletons are popular in Java applications but they don't provide much value, especially when dependency injection is involved. Although singletons save object creation (and later garbage collection), getting a handle to the single instance requires synchronization. Singletons are most useful for:
单例在java应用程序中非常流行,但是他们没有提供太多的值,尤其是在依赖注入被调用的时候。尽管单例保存了对象创建(然后垃圾回收),获取一个单例的句柄需要同步。单例在以下情况有用。
stateful objects, such as configuration or counters
有状态的对象,例如配置文件和计数器
objects that are expensive to construct or lookup
花费很大的代价来构造或者查找的对象
objects that tie up resources, such as a database connection pool.
连接到外部资源的对象,例如数据库连接池。
spring framework:
As a rule, use the prototype scope for all stateful beans and the singleton scope for stateless beans.
作为一个规则,所有有状态bean用原型的scope,所有没有状态的bean用单例scope。
这中间就有一个冲突,
spring希望把所有的无状态的对象都作为单例,当然也包括那些确实需要单例来完成情况
guice只是希望把那些真正需要单例对象作为单例,其他无状态的对象(可做可不做的)都声明为unscoped。
我觉得这时两家设计哲学的问题。
spring作为一个重量级的依赖注入框架,使得放在spring容器中的bean可以添加后置处理器、消息资源等额外特性。把所有的无状态的类声明为单例bean从而添加这些特性。
而guice作为一个轻量级的依赖注入框架,没有spring那么多的后置处理器、消息资源等东西,它相信大部分人使用对象是“创建它,使用它,然后废弃它(create it, use it and toss it)”,没有必要把所有的对象纳入guice容器管理。如果纳入其中管理,损耗内存,而且拖慢启动速度。
但是这需要使用者有较高的程序素养,就是什么时候真的需要使用单例,一个对象的创建到底花多长时间创建才需要定为单例?没有一个明确的规则,正所谓增加灵活性的同时也增加复杂性。因此guice在这点和spring相比各有千秋。个人觉得gucie适合有修养的程序员,而spring适合绝大部门程序员。
一家之言,还请拍砖。
相关文章推荐
- 新安装和已安装nginx如何添加未编译安装模块/补丁
- 原已经安装好的nginx,现在需要添加一个未被编译安装的模块:
- nginx安装编译,动态添加模块及其各模块的作用
- 安装成功的nginx如何添加未编译安装模块
- Nginx之为已安装nginx动态添加模块的方法
- nginx编译安装和未编译模块的添加
- 安装成功的nginx如何添加未编译模块?
- 安装成功的nginx如何添加未编译安装模块
- 安装成功的nginx如何添加未编译安装模块
- nginx添加未编译安装模块
- 安装成功的nginx如何添加未编译安装模块
- 生产线上的nginx如何添加未编译安装模块
- Ubuntu下编译安装nginx,添加rtmp模块,推流、拉流播放
- 安装成功的nginx如何添加未编译安装模块
- 安装成功的nginx,如何添加未编译安装模块(非覆盖安装http_image_filter_module)
- 安装成功的nginx如何添加未编译安装模块
- 安装成功的nginx,如何添加未编译安装模块(非覆盖安装http_image_filter_module)
- 编译安装 Nginx(添加 fastdfs-nginx-module 模块)异常
- 给已经编译安装了的nginx 添加http_ssl_module模块
- nginx安装编译,动态添加模块及其各模块的作用