mirror of
https://gitee.com/hyperf/hyperf.git
synced 2024-11-30 02:37:58 +08:00
3.8 KiB
3.8 KiB
v2.0 - TBD
Major Changes
- Refactor hyperf/di component, in particular, AOP and Annotation Scanner are optimized, in v2.0, the component use a brand new loading mechanism to provided an incredible AOP function.
- The most significant functional differences compared to v1.x is that you can cut into any classes in any ways with Aspect. For example, in v1.x, you can only use AOP in the class instance that created by Hyperf DI container, you cannot cut into the class instance that created by
new
identifier. But now, in v2.0, it is available. But there is still has an exception, the classes that used in bootstrap stage still cannot works. - In v1.x, the AOP ONLY available for the normal classes, not for Final class that cannot be inherited by a subclass. But now, in v2.0. it is available.
- In v1.x, you cannot use the property value that marked by
@Inject
or@Value
annotation in the constructor of current class. But now, in v2.0, it is available. - In v1.x, you can only use
@Inject
and@Value
annotation in the class instance that created by Hyperf DI container. But now, in v2.0, it is available in any ways, such as the class instance that created bynew
identifier. - In v1.x, you have to define the full namespace of Annotation class when you use the Annotation. But now, in v2.0, the component provide a global import mechanism, you cloud define an alias for Annotation to use the Annotation directly without using the namespace. For example, you cloud define
@Inject
annotation in any class without defineuse Hyperf\Di\Annotation\Inject;
. - In v1.x, the proxy class that created by the DI container is a subclass of the target class, this mechanism will cause the magic constant will return the value of proxy class but not original class, such as
__CLASS__
. But now, in v2.0, the proxy class will keep the same structure with the original class, will not change the class name or the class structure. - In v1.x, the proxy class will not re-generate when the proxy file exists even the code of the proxy class changed, this strategy will improve the time-consuming of scan, but at the same time, this will lead to a certain degree of development inconvenience. And now, in v2.0, the file cache of proxy class will generated according to the code content of the proxy class, this changes will reduces the mental burden of development.
- Add
priority
parameter for Aspect, now you could definepriority
in Aspect class by class property or annotation property, to manage the order of the aspects. - In v1.x, you can only define an Aspect class by
@Aspect
annotation, you cannot define the Aspect class by configuration file. But now, in v2.0, it is available to define the Aspect class by configuration file or ConfigProvider. - In v1.x, you have to add
Hyperf\Di\Listener\LazyLoaderBootApplicationListener
to enable lazy loading. In 2.0, lazy loading can be used directly. This listener is therefore removed. - Add
annotations.scan.class_map
parameter, now you could replace class dynamically without having to follow the PSR-4.
- The most significant functional differences compared to v1.x is that you can cut into any classes in any ways with Aspect. For example, in v1.x, you can only use AOP in the class instance that created by Hyperf DI container, you cannot cut into the class instance that created by
Dependencies Upgrade
- Upgraded
ext-swoole
to>=4.5
; - Upgraded
psr/event-dispatcher
to^1.0
; - Upgraded
monolog/monolog
to^2.0
; - Upgraded
phpstan/phpstan
to^0.12.18
; - Upgraded
vlucas/phpdotenv
to^4.0
; - Upgraded
symfony/finder
to^5.0
; - Upgraded
symfony/event-dispatcher
to^5.0
; - Upgraded
symfony/console
to^5.0
; - Upgraded
symfony/property-access
to^5.0
; - Upgraded
symfony/serializer
to^5.0
; - Upgraded
elasticsearch/elasticsearch
to^7.0
;
Removed
- Removed
Hyperf\Di\Aop\AstCollector
; - Removed
Hyperf\Di\Aop\ProxyClassNameVisitor
; - Removed
Hyperf\Di\Listener\LazyLoaderBootApplicationListener