如果我添加一个通过“new”实例化类“ReportQueryDetailsDAO”的hack,那么类“ReportQueryDetailsDAO”将不会像实体管理器那样实例化其自动连接字段,这将导致空异常。
@Component
public class ReportEverythingForm
{
@Autowired
ReportQueryDetailsDAO reportQueryDetailsDAO;
public ReportEverythingForm() {
}
类“ReportEverythingForm”由控制器类“MonitorReportController”实例化和调用。自动布线似乎在这里工作。
@Controller
public class MonitorReportController
{
@Autowired
private ReportEverythingForm reportEverythingForm;
@Transactional
@RequestMapping(value = "/reportEverything", method = RequestMethod.POST)
public ModelAndView getReportEverything(HttpServletRequest request,
HttpServletResponse response, HttpSession session, Locale locale)
{
我怎样才能让自动布线工作?它适用于代码的其他部分,所以我想这不是一个一般性的问题。
一些相关的进口产品包括:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
按要求提供“ReportQueryDetailsDao”的内容:
@Repository
public class ReportQueryDetailsDAO
{
private static final Logger logger = LoggerFactory
.getLogger(ReportQueryDetailsDAO.class);
@PersistenceContext(unitName = "RATOR_MONITORING_CONFIGURATION", type = PersistenceContextType.TRANSACTION)
private EntityManager entityManager;
@Transactional
public ReportQueryDetail findbySQLId(Long sqlId)
{
try
{
logger.info("select rqd from ReportQueryDetail rqd where rqd.reportQueryDetailsId = " + sqlId);
Query query = entityManager.createQuery("select rqd from ReportQueryDetail rqd where rqd.reportQueryDetailsId = :sqlId");
query.setParameter("sqlId", sqlId);
List<ReportQueryDetail> results = query.getResultList();
ReportQueryDetail reportQueryDetail = (ReportQueryDetail) results.get(0);
return reportQueryDetail;
} catch (Exception e)
{
logger.debug("Exception:" + e.getMessage(), e);
return null;
}
}
摘自pom.xml:
<java-version>1.6</java-version>
<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>