I would go for option 1 as well but I would also recommend you to program to interfaces. Create an interface that sets which functions the DAO has to provide and then you can implement those with different classes depending on your needs.
public interface CustomerDao {
public void saveCustomer(Customer customer);
public Customer getCustomer(int id);
}
Then you can have class SimpleCustomerDao implements CustomerDAO {/*code here*/}
.
In your main
(and everywhere else you need it) you'll have:
//Note that you have an interface variable and a real class object
CustomerDao customerDao = new SimpleCustomerDao();
You can figure out the benefits of doing this!
And yes, if you use Spring or Guice then do use Dependency Injection!