--- date: 2020-11-17 id: 269a4976-5800-4914-b49e-4bf16dd64797 title: "@required" --- # Description When autowiring is enabled for a service, you can also configure the container to call methods on your class when it’s instantiated. For example, suppose you want to inject the `logger` service, and decide to use setter-injection: ``` php // src/Util/Rot13Transformer.php namespace App\Util; class Rot13Transformer { private $logger; /** * @required */ public function setLogger(LoggerInterface $logger) { $this->logger = $logger; } public function transform($value) { $this->logger->info('Transforming '.$value); // ... } } ``` Autowiring will automatically call any method with the @required annotation above it, autowiring each argument. If you need to manually wire some of the arguments to a method, you can always explicitly configure the method call. Despite property injection has some drawbacks, autowiring with @required annotation can also be applied to public typed properties: ``` php namespace App\Util; class Rot13Transformer { /** @required */ public LoggerInterface $logger; public function transform($value) { $this->logger->info('Transforming '.$value); // ... } } ```