Component lifecycle methods