Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc Spring3MVC:@Transactional已添加到服务类,现在出现异常_Spring Mvc_Transactions_Annotations - Fatal编程技术网

Spring mvc Spring3MVC:@Transactional已添加到服务类,现在出现异常

Spring mvc Spring3MVC:@Transactional已添加到服务类,现在出现异常,spring-mvc,transactions,annotations,Spring Mvc,Transactions,Annotations,我对spring和java非常陌生。我一直在使用springsource.org来尝试创建一个spring3mvcweb应用程序。我有它的工作,我可以抓取信息,并显示它的控制器和经理 现在我正在开发编辑信息并将其保存回数据库的功能。我在服务类中的save函数中添加了@Transactional注释,现在我收到了一个未满足的PendencyException。由于非常新,我不知道该怎么做才能清除它。我为EventsManager添加了一个bean,但我不认为这是必要的,因为注释可以消除对大量xml

我对spring和java非常陌生。我一直在使用springsource.org来尝试创建一个spring3mvcweb应用程序。我有它的工作,我可以抓取信息,并显示它的控制器和经理

现在我正在开发编辑信息并将其保存回数据库的功能。我在服务类中的save函数中添加了
@Transactional
注释,现在我收到了一个
未满足的PendencyException
。由于非常新,我不知道该怎么做才能清除它。我为EventsManager添加了一个bean,但我不认为这是必要的,因为注释可以消除对大量xml配置文件的需要。我不确定错误在哪里,所以我发布了我的源代码。谢谢你花时间帮我解决问题

完全例外:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'eventsController' defined in file [$Path\gov\mt\dphhs\epts\web\EventsController.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [gov.mt.dphhs.epts.services.EventsManager]: : No matching bean of type [gov.mt.dphhs.epts.services.EventsManager] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [gov.mt.dphhs.epts.services.EventsManager] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
控制器类:

@Controller
public class EventsController {

    private EventsManager eventsManager;

    @Autowired
    public EventsController(EventsManager eventsManager){
        this.eventsManager = eventsManager;
    }

    @RequestMapping("/events/events")
    public String displayEvents(ModelMap map){

        map.addAttribute("allEvents", eventsManager.getAllEvents());

        int totalEvents = eventsManager.getAllEvents().size();
        map.addAttribute("totalEvents",totalEvents);

        map.addAttribute("eventsTitle" , totalEvents + " Events");

        return "events";
    }

    @RequestMapping("/events/eventForm")
    public String editEvents(@RequestParam("id") Long eventId, ModelMap map){

        Events event = eventsManager.getEventById(eventId);
        map.addAttribute("pageTitle" , "Edit Event");
        map.addAttribute("event",event);

        return "eventForm";
    }

    @RequestMapping("/events/newEvent")
    public String newEvent(ModelMap map){

        Events event = new Events();
        map.addAttribute("pageTitle" , "New Event");
        map.addAttribute("event",event);

        return "eventForm";
    }

    @RequestMapping("/events/submitEvent")
    public String handleEventForm(@ModelAttribute("event")
            Events event, BindingResult result){

        System.out.println("Event Name:" + event.getEventName() + " ID: " + event.getEvntId());

        if(event.getEvntId() == null)
        {
            eventsManager.save(event);
        }

        return "redirect:/events/events";
    }   
}
服务类别:

@Service("EventsManager")
public class EventsManager implements IEventsManager {


    private EventsDAO eventsDao;

    @Autowired
    public void EventsDAO(EventsDAO eventsDao) {
        this.eventsDao = eventsDao;
    }

    public List<Events> getAllEvents() {
        return eventsDao.findAll();
    }

    public Events getEventById(Long id) {

        return eventsDao.findById(id);
    }

    public void delete(Events event) {
        // TODO Auto-generated method stub

    }

    @Transactional
    public void save(Events event) {
        eventsDao.save(event);
    }

    public Events update(Events event) {

        return eventsDao.update(event);
    }

}
应用程序上下文:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
                    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                    http://www.springframework.org/schema/context
                    http://www.springframework.org/schema/context/spring-context-3.0.xsd 
                    http://www.springframework.org/schema/tx 
                    http://www.springframework.org/schema/tx/spring-tx.xsd">

<context:component-scan base-package="gov.mt.dphhs.epts" />

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/" />
    <property name="suffix" value=".jsp" />
</bean>

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="EPTSTest3Pu" />
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />
<context:annotation-config />

<bean id="EventsManager" class="gov.mt.dphhs.epts.services.EventsManager" />

<bean id="SpecialGuestsDAO" class="gov.mt.dphhs.epts.repository.SpecialGuestsDAO" />

<bean id="GroupMembersDAO" class="gov.mt.dphhs.epts.repository.GroupMembersDAO" />

<bean id="GroupsDAO" class="gov.mt.dphhs.epts.repository.GroupsDAO" />

<bean id="EventNotificationsDAO" class="gov.mt.dphhs.epts.repository.EventNotificationsDAO" />

<bean id="EventListingsDAO" class="gov.mt.dphhs.epts.repository.EventListingsDAO" />

<bean id="EventGroupXrefDAO" class="gov.mt.dphhs.epts.repository.EventGroupXrefDAO" />

<bean id="EventsDAO" class="gov.mt.dphhs.epts.repository.EventsDAO" />


看起来autowire注释有点混乱,但我不能确定

您在EventsController中声明的依赖关系是对具体EventsManager类的依赖,而不是对接口IEventsManager的依赖,这是更好的做法,即代码到接口。Spring使用一些智能自动连接bean,比如按类型自动连接和按名称自动连接。例如(我正在简化),spring将检查bean容器中是否有匹配的类型或名称。我本可以假设“按类型自动连接”与具体类型一起工作,但这里可能会出现一些特殊情况

我建议:

  • 在您的应用程序中使用IEventsManager 控制器,并声明该类型 构造函数参数中的依赖项
  • 用小写字母命名Springbean,就像java字段/变量命名约定一样(然后spring可以通过名称自动连接,将“eventsManager”构造函数参数与“eventsManager”Springbean匹配)

另外,看起来您两次指定了一些bean。当您使用@Service注释并对该包进行组件扫描时,无需在上下文文件中再次指定它。因此,您的“EventsManager”bean已经定义了两次,但我不确定这是否会导致您的依赖性问题。

看起来autowire注释变得混乱,但我不能确定

您在EventsController中声明的依赖关系是对具体EventsManager类的依赖,而不是对接口IEventsManager的依赖,这是更好的做法,即代码到接口。Spring使用一些智能自动连接bean,比如按类型自动连接和按名称自动连接。例如(我正在简化),spring将检查bean容器中是否有匹配的类型或名称。我本可以假设“按类型自动连接”与具体类型一起工作,但这里可能会出现一些特殊情况

我建议:

  • 在您的应用程序中使用IEventsManager 控制器,并声明该类型 构造函数参数中的依赖项
  • 用小写字母命名Springbean,就像java字段/变量命名约定一样(然后spring可以通过名称自动连接,将“eventsManager”构造函数参数与“eventsManager”Springbean匹配)

另外,看起来您两次指定了一些bean。当您使用@Service注释并对该包进行组件扫描时,无需在上下文文件中再次指定它。因此,您的“EventsManager”bean已经定义了两次,但我不确定这是否会导致您的依赖性问题。

看看这个问题。我想你可能也有同样的问题看看这个问题。我想你可能也有同样的问题
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
                    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                    http://www.springframework.org/schema/context
                    http://www.springframework.org/schema/context/spring-context-3.0.xsd 
                    http://www.springframework.org/schema/tx 
                    http://www.springframework.org/schema/tx/spring-tx.xsd">

<context:component-scan base-package="gov.mt.dphhs.epts" />

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/" />
    <property name="suffix" value=".jsp" />
</bean>

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="EPTSTest3Pu" />
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />
<context:annotation-config />

<bean id="EventsManager" class="gov.mt.dphhs.epts.services.EventsManager" />

<bean id="SpecialGuestsDAO" class="gov.mt.dphhs.epts.repository.SpecialGuestsDAO" />

<bean id="GroupMembersDAO" class="gov.mt.dphhs.epts.repository.GroupMembersDAO" />

<bean id="GroupsDAO" class="gov.mt.dphhs.epts.repository.GroupsDAO" />

<bean id="EventNotificationsDAO" class="gov.mt.dphhs.epts.repository.EventNotificationsDAO" />

<bean id="EventListingsDAO" class="gov.mt.dphhs.epts.repository.EventListingsDAO" />

<bean id="EventGroupXrefDAO" class="gov.mt.dphhs.epts.repository.EventGroupXrefDAO" />

<bean id="EventsDAO" class="gov.mt.dphhs.epts.repository.EventsDAO" />