you can just inject an instance of Magento\Catalog\Model\ResourceModel\Product
in your class and use that one instead of $product->getResource()
;
/**
* @var \Magento\Catalog\Model\ResourceModel\Product
*/
private $productResource;
public function __construct(
...
\Magento\Catalog\Model\ResourceModel\Product $productResource,
....
) {
....
$this->productResource = $productResource;
....
}
And use this inside your methods
$tablecolor = $productResource->getAttribute('xyz');
This is how you can use the product resource model, but in your specific case, when you want to get an instance of a certain attribute you can use the product attribute repository
/**
* @var \Magento\Catalog\Api\ProductAttributeRepositoryInterface
*/
private $attributeRepository;
public function __construct(
...
\Magento\Catalog\Api\ProductAttributeRepositoryInterface $attributeRepository,
....
) {
....
$this->attributeRepository = $attributeRepository;
....
}
and later use this
try {
$tablecolor = $attributeRepository->get('xyz');
//do soemthing with tablecolor
} catch (\Magento\Framework\Exception\NoSuchEntityException $e) {
//the attribute does not exist
}
If you want to only get the label of an option of a dropdown attribute for a specific product you can just use this
$product->getAttributeText('xyz');