With regard to letting your classes "know" about Spring, that is really your call, but generally there is very little need for your classes to delve into Spring. The more you can let Spring do the wiring up for you the better 
With regard to the class which needs a list of reports, it depends on *who* knows which report you need, does each report know whether it is suitable not. Either way, some kind of strategy is in order I think:
Code:
interface ReportSelector {
Report getReport(some.context...);
}
This reportSelector would then be wired up with all the reports and then injected into your class via spring:
Code:
<bean class="yourClass" class="....">
<constructor-arg>
<bean class="your.ReportSelectorImpl">
<property name="loggedInReport">
<bean class="your.FirstReport"/>
</property>
<property name="loggedOutReport">
<bean class="your.SecondReport"/>
</property>
</bean>
</constructor-arg>
</bean>
and code:
Code:
public class YourClass {
private final ReportSelector reportSelector;
public YourClass(final ReportSelector reportSelector) {
this.reportSelector = reportSelector;
}
public void someMethod() {
Report report = reportSelector.getReport(user etc.);
}
}
ReportSelector might look like:
Code:
public class ReportSelectorImpl implements ReportSelector {
private Report loggedInReport;
private Report loggedOutReport;
public Report getReport(final User user) {
if (user.isLoggedIn()) {
return loggedInReport;
} else {
return loggedOutReport;
}
}
public void setLoggedInReport(final Report report) {
this.loggedInReport = report;
}
public void setLoggedOutReport(final Report report) {
this.loggedOutReport = report;
}
}
The implementation of reportSelector is obviously silly but you get the idea 
HTH.