Autowiring이 매우 강력하기 때문에 그 만큼 강한 책임이 뒤따르게 된다는 표현입니다.[footnote]저 문장 혹시 스파이더맨1에 나오는 대사 아닌가요? 할머니가 스파이더맨한테..[/footnote]

byName : bean의 이름과 bean이 설정되어야 할 속성이 이름이 같아야 합니다.
=> 만약에 속성의 이름을 변경하기로(리팩토링, 예를 들어 foo -> bar로) 결정했는데 bean의 이름을 변경하지 않았다면, ㄷㄷㄷ 거기에 더해서 혹시 bar라는 bean이 존재하고 있다면. 더욱 ㄷㄷㄷ;;

byType : 다들 아시다시피 같은 타입의 bean이 여러개 일 때 사용할 수가 없습니다.

constructor: byType과 마찬가지 입니다.

autodetect : 일단 byConstruct를 시도해보고, 그 다음에 byType을 시도 하기 때문에 위와 같은 상황에서UnsatisfiedDependencyException을 볼 수 있습니다.

무엇보다 가장 큰 단점은
"대체 뭐가 설정 된건지 알 수가 없다"
입니다.

그럼 사용하지 말아야 할까요??
글쎄요. 규약(Convention)이 잘 정의되어 있고, 잘 따르고 있는 집단에서는 사용하면 좋을 것 같습니다.
그런 집단이 아니더라도 자주 변동되지 않는 부분에 대한 bean 설정에서 byName으로 설정해 두면 XML도 간단해 지고 좋치 않을까 생각해 봅니다.