Una forma en que normalmente decido si uso o no la inyección de dependencia es si necesito o no burlar o anular la clase colaboradora al escribir una prueba unitaria para la clase bajo prueba. Por ejemplo, en su ejemplo, usted (correctamente) está inyectando el DAO porque si escribe una prueba unitaria para su clase, probablemente no desee que se escriba ningún dato realmente en la base de datos. O tal vez una clase colaboradora escribe archivos en el sistema de archivos o depende de un recurso externo. O el comportamiento es impredecible o difícil de explicar en una prueba unitaria. En esos casos, es mejor inyectar esas dependencias.
Para las clases colaboradoras como TreeSet, normalmente no las inyectaría porque generalmente no hay necesidad de burlarse de clases simples como estas.
Una nota final: cuando un campo no puede ser inyectado por alguna razón, pero todavía me gustaría simularlo en una prueba, encontré la clase Junit-addons PrivateAccessor útil para poder cambiar el campo privado de la clase a un simulacro objeto creado por EasyMock (o jMock o cualquier otro marco de burla que prefiera).
Spring también tiene la clase 'ReflectionTestUtils' para operaciones en miembros privados. –