2015-12-25 35 views
1

我使用Spring MVC为我的项目。是否可以在另一个类上使用相同的自动装配对象?Spring MVC使用外部控制器类自动装配对象

我有两个控制器,一个用于导航,另一个用于操作。

这是我的样品导航控制器:

@Controller 
public class NavigationController { 

    @Autowired 
    private DepartmentDAO deptDao; 

    @RequestMapping("/") 
    public ModelAndView panel() { 
     ModelAndView mv = new ModelAndView("panel"); 
     Department dept = deptDao.getDept(); 
     mv.addObject("department",dept); 
     return mv; 
    } 
} 

然后我操作的控制器:

@Controller 
public class OperationController { 

    @RequestMapping(value = "/save.do", method = RequestMethod.POST) 
    public ModelAndView saveEvent(){ 
     ModelAndView mv = new ModelAndView("next"); 
     Event event = new EventCreator().createEvent(); 
     //some logic here 
     return mv; 
    } 
} 

这是我的业务委托类:

public class EventCreator { 
    public Event createEvent(){ 
    //logic here 
    //I need to use the deptDao here. 
    } 
} 

太感谢你了!

回答

2

你可以在EventCreator类中简单地使用Autowire DepartmentDAO,就像你的自动装配它在NavigationController类中一样。确保您使用@Component注释EventCreator类,并将其包含在执行组件扫描的程序包中,以便Spring将在您的EventCreator类中自动调用DepartmentDao

@Component 
public class EventCreator { 

    @Autowired 
    private DepartmentDAO deptDao; 

    public Event createEvent(){ 
    //logic here 
    //I need to use the deptDao here. 

    //deptDao.getAllDepartments(); 

    } 
} 
+0

嗨!我尝试了你所说的话,但我仍然得到一个nullpointerexception。 – pat3ck029

+0

你的包装结构是什么?你在哪个包中放置了“EventCreator”类?你是如何定义组件扫描的?确保'EventCreator'类用'@ Component'标注,并且这个类应该放在你在组件扫描中指定的'base package'中。如果问题尚未解决,您可以发布完整的配置和代码 –

+1

嗨。修复。我忘了我用新来创建EventCreator的实例。现在我在我的操作控制器中使用了@Autowired EventCreator。十分感谢你的帮助! – pat3ck029

2

可以在另一个春天bean对象

假设@Autowired一个Spring bean对象

我假设你已经宣布DepartmentDAO与@Repository 注释,你都没有在您的 问题中包括DepartmentDAO代码

有两种方法来解决你的问题

  1. 一个有出色的@TimeTravel注释EventCreator与 @Component与创造的Spring bean解释,你可以很容易自动装配 DepartmentDAO在EventCreator类

  2. ,你有两个控制器类,这使得它的Spring beans,因为它们与@Controller的,你可以做什么,你可以在OperationController类和通研究所自动装配 departmentDAO DepartmentDAO作为参数的ANCE在EventCreator类的构造函数

@Controller 
public class OperationController { 
@Autowired 
private DepartmentDAO deptDao; 

@RequestMapping(value = "/save.do", method = RequestMethod.POST) 
public ModelAndView saveEvent(){ 
    ModelAndView mv = new ModelAndView("next"); 
    Event event = new EventCreator(deptDao).createEvent(); 
    //some logic here 
    return mv; 
    } 
} 


public class EventCreator { 

private DepartmentDAO deptDao=null; 

public EventCreator(DepartmentDAO deptDaoAsArg){ 
    deptDao=deptDaoAsArg; 
} 

public Event createEvent(){ 
//logic here 
//I need to use the deptDao here. 
} 
} 
+0

嗨。感谢您的帮助。我使用了TimeTravel的解决方案。但还是谢谢! :) – pat3ck029

+0

高兴地帮助:),其始终编码决定你想使用什么方法,我虽然我应该为你提供一个替代解决方案:) – Dev

+1

很高兴我找到了你的答案,这是唯一的解决方案,为我工作 –

相关问题