There is no way two instances of Class2 are created if you are using application scope (unless you use the new operator elsewhere).
What do you mean by:
Class2 has been shown to be null intermittently on startup.
How do you realize about this? Maybe you are trying to inject it in another component and this component sometimes startup first.
We get null pointer exceptions intermittently out of Class2 when referencing Class1 on startup. Class1 has not been initialized yet, it seems, even though Class2 has a startup dependency on it. It looks like Class2 is jumping the gun on startup. That's why a 'create new' was put in for it in Class2 - to force it to initialize. I didn't think this was right. This hasn't been needed up until now and we have had many successful deployments.
thanks for your comment