Inversão de Controle

Tenho visto em alguns sites que a inversão de controle diminue a dependencia que existe entre uma classe e outra de modo que você não precise instaciar o objeto na página, mas se é esse o problema não seria uma alternativa usar métodos estáticos?

Ainda não entendo bem desse conceito de IoC então provavelmente estou errado mas quero ouvir o que você tem a dizer…

Amigo a grosso modo trabalhar com metodos estaticos não seria muito viavel dependendo do seu objetivo… isto pois sabemos que classes que possuem variaveis e metodos staticos uma vez carregadas pela JVM permanecem na heap enquanto a JVM estiver executando… Logo não seria uma boa ideia no caso de uma aplicaçao de medio e grande porte. E por isso que eu acho que a inversao de controle é uma tecnica bastante valida ainda pra diminuir o acoplamento.

Um exemplo rápido de IOC

Método sem IoC:

public void inserir(Cliente cliente) {
     Connection c = FabricaConexao.abrirConexao();
     ....//faz algumas coisas e tal
     statement.insert(cliente);
     c.commit();
     c.close();
}

Método com IoC:

public void inserir(Cliente cliente, Connection c) {
     statement.insert(cliente);
}

A grande sacada do IoC é inverter algumas responsabilidades, como no exemplo citado acima, onde o método inserir não cuida da abertura da conexão e nem é responsável pelo commit ou rollback da transação. Ao invés disso ele transfere a responsabilidade para quem o chama e espera receber a conexão pronta para que ele possa usar.