Transactions aren't injected into objects. A transaction is attached to the current thread (using a ThreadLocal variable). As soon as a thread starts a transaction, every code running in this thread executes in the context of this transaction, whatever objects you might use, until the transaction ends (or a new one is started).
Side note: your lazyLoad()
method doesn't load anything. You would have to call a method on the lazy list returned by getList()
to load it.