-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Leo,

On 2/6/14, 11:08 AM, Leo Donahue wrote:
> This question was spawned by two things:
> 
> I'm reading a book on Dependency Injection The latest security
> announcement - reading the source for FileUploadBase.java

Umm... ?

> Some reading material suggests that one use a simple factory
> pattern to move object creation dependencies to a different class.

Dependency Injection (or IoC, or any number of other names) is
different than using factories. It basically places the burden of
dependency-wiring on the DI framework and removes it entirely from the
"real" code.

Take the following example:

class SomeClass {
  public void someMethod()
  {
    Fruit fruit = new Apple();

    fruit.eat();
  }
}

That's pretty straightforward: the caller can call a method
(someMethod) and an apple is created and eaten (whatever that means).
If you want to say "well, I want to be able to eat any kind of fruit",
then you could change that into a factory:

class SomeClass {
  public void someMethod()
  {
    Fruit fruit = FruitFactory.createFruit();

    fruit.eat();
  }
}

That hasn't changed much. If you do alot of fruit-creation, and you
always use the factory, then you can switch from apples to bananas to
pears in one place and everyone is all eating the same thing. Great.
But that's not DI and it's not IoC. This is IoC:

class SomeClass {
  private Fruit _fruit;

  public Fruit getFruit() {
      return _fruit;
  }

  public void setFruit(Fruit f) {
    _fruit = f;
  }

  public void someMethod() {
    _fruit.eat();
  }
}

Then you tell the IoC container: "SomeClass requires some fruit.", and
then you either tell it exactly what fruit to use, or provide it with
some hints as to where to obtain fruits and it will wire-up the
relationships. The IoC container will create an instance of SomeClass,
fill it with fruit, and then you can call SomeMethod without ever
having to juggle the whole fruit situation at all.

> I see where the object dependencies that FileUploadBase.java has,
> like FileItemIteratorImpl, just simply place those dependent
> classes in the same java source file.
> 
> I don't see a problem with that approach, should I?

That's one way to do it. But you are talking about class design and
physical implementation, not simply class architecture and the logical
relationships between things. Inner classes are sometimes entirely
appropriate, and other times they are awkward to use, etc. For classes
expected to be used directly by client code, it's nicer for
documentation purposes to have them in separate classes (i.e. not
inner classes).

So... what does this all have to do with the recent security announcement?

Hope that helps,
- -chris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
Comment: GPGTools - http://gpgtools.org
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQIcBAEBCAAGBQJS9Ub8AAoJEBzwKT+lPKRYIXwQAJuH5P2kb0iuU+XhkxzyIKzb
n8wVDuWUmvnqPv5tzNEPglGB/PwxH5mywSYjvW6OUs8rcI6IUSU7S4320l60nPi8
mX14byhlJFyJ2vW8x8yDrbbqiQkbM/gopmgT6RQK64Hm8b0s5ABaudZDknvsBhIm
WHDZnTwbLlXW/yozXjKWrfumAF2qkiJcOVMrFGyfjQGhhJostGjDrWJI31ddRlkB
5EOmlIF2Gq9yAsZlFRpiENBQ2HFS05EuJCcCHcYpfBGAIxO7WqxVAdNRSyT4gZ5c
yneRmAtu6aMfbtdbx0xA1UV1ObezIOqqvH4ni1NkNvv34A6yGOh7QKDhHPd9uJ+Y
ZbLsXdOLUk1fScgegIvPxNbyggYPfNLXcyasagiO2QEG908ABr+/5lyy+B65JUeL
7Kniu25Zv6EdAijrUI+LfNc/uPI9upmu48xIFjSx0UaX9PT28uZ1UCQmjHdRHv1o
i0qERB2bBkqEdIwGeB7RtpbUTxgbojlPe8hWMR2KTaWSgCZA1/fNH6wyrFKdOA6b
2BpnRYQ1vc0d8xlauHBxbnZ5sCEzdchYjjpmCDxj0Lxk4Pi4eoaBheUX5DD5qbtU
lNWfEt3pJCvlccz0f5ULIlwtWbKUxFTFEykAiQN2hr4Pt2sJkZe3Yq8kd8cZlfYi
y+7ixJpvHwZZCD9ea1u/
=4QAZ
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to