spring 如何注释带构造方法的类

fujilin 2011-04-19 09:35:56
@Component("paginationHibernate")
public class PaginationHibernate implements Pagination {


当PaginationHibernate 类没有构造方法的时候不会报错而加了构造方法
@Component("paginationHibernate")
public class PaginationHibernate implements Pagination {

public PaginationHibernate(String hql, int pageSize, int pageNumber){
this.hql = hql;
this.pageSize = pageSize;
this.pageNumber = pageNumber;
init();
this.setPageNumber(pageNumber);
}
}

就报如下错:


09:21:17,457 ERROR ContextLoader:215 - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'paginationHibernate' defined in file [C:\apache-tomcat-6.0.20\webapps\zxs3\WEB-INF\classes\com\fu3\office\factor\Impl\PaginationHibernate.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.fu3.office.factor.Impl.PaginationHibernate]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.fu3.office.factor.Impl.PaginationHibernate.<init>()
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:883)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:839)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3934)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4429)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:987)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:909)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:495)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.fu3.office.factor.Impl.PaginationHibernate]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.fu3.office.factor.Impl.PaginationHibernate.<init>()
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:58)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:877)
... 40 more
Caused by: java.lang.NoSuchMethodException: com.fu3.office.factor.Impl.PaginationHibernate.<init>()
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.getDeclaredConstructor(Unknown Source)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:54)
... 41 more
...全文
562 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
fujilin 2011-05-24
  • 打赏
  • 举报
回复
问题解决了,无参构造方法可用,是别的地方出问题
giant7 2011-05-10
  • 打赏
  • 举报
回复
不太懂,帮楼主顶下
fujilin 2011-05-10
  • 打赏
  • 举报
回复
我在网上查了下,XML方式可以,但用annotation却没有相关的例了
哪位大虾帮决解一下,谢谢了
回贴者必给分!!!
fujilin 2011-05-04
  • 打赏
  • 举报
回复
我的类是无参构造函数呀,但我一加上注释@Component("Pagination")
就报错,这么多天了,还是没解决.....除非去掉那个无参构造函数

@Component("Pagination")
public class PaginationHibernate implements Pagination {
private int limit ;
private int start ;
private String hql;

private SessionFactory sessionFactory;

public SessionFactory getSessionFactory() {
return sessionFactory;
}

@Resource
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}


public PaginationHibernate(){
getMaxElements();
}

private void init(){
getList();
}

public List<Object> getList() {
// int numBegin = 0;
// if(pageNumber<1){
// numBegin = 0;
// }else{
// numBegin = (pageNumber - 1)*pageSize;
// }
//
//
// Session s = sessionFactory.getCurrentSession();
// Query query = s.createQuery(hql);
// query.setFirstResult(numBegin);
// query.setMaxResults(pageSize);
// return query.list();
return null;
}

public int getMaxElements() {
Session s = sessionFactory.getCurrentSession();
int count = 0;
Query q = s.createQuery("select count(n.id) from"+ hql+" n");
Long l = (Long) q.uniqueResult();
count = l.intValue();
return count;
}

public int getMaxPages() {
// TODO Auto-generated method stub
return 0;
}

public int getNext() {
// TODO Auto-generated method stub
return 0;
}

public int getPageNumber() {
// TODO Auto-generated method stub
return 0;
}

public int getPageSize() {
// TODO Auto-generated method stub
return 0;
}

public int getPrevious() {
// TODO Auto-generated method stub
return 0;
}

public boolean hasNext() {
// TODO Auto-generated method stub
return false;
}

public boolean hasPrevious() {
// TODO Auto-generated method stub
return false;
}

public boolean isFirst() {
// TODO Auto-generated method stub
return false;
}

public boolean isLast() {
// TODO Auto-generated method stub
return false;
}

public void setPageNumber(int pageNumber) {
// TODO Auto-generated method stub

}

public void setPageSize(int pageSize) {
// TODO Auto-generated method stub

}

}
宁波朱超 2011-05-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fujilin 的回复:]
我添加了一个默认无参构造函数,但是还是报一样的错

@Component("Pagination")
public class PaginationHibernate implements Pagination {
private int limit ;
private int start ;
private String hql;


public PaginationHibe……
[/Quote]

加一个无参的构造方法

public PaginationHibernate(){

}
fujilin 2011-05-02
  • 打赏
  • 举报
回复
用了构造方法,还是不行,为什么?
fujilin 2011-04-28
  • 打赏
  • 举报
回复
用xml方法行,但用annotation就不行,是不是annotation不支带构造方法的类
fujilin 2011-04-28
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<context:annotation-config />
<context:component-scan base-package="com.fu3.office" />

<!--
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">


<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/spring" />
<property name="username" value="root" />
<property name="password" value="bjsxt" />
</bean>
-->

<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>classpath:jdbc.properties</value>
</property>
</bean>

<bean id="dataSource" destroy-method="close"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>



<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!--
<property name="annotatedClasses">
<list>
<value>com.bjsxt.model.User</value>
<value>com.bjsxt.model.Log</value>
</list>
</property>
-->
<property name="packagesToScan">
<list>
<value>com.fu3.office.model</value>

</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>

<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!--
<aop:config>
<aop:pointcut id="bussinessService"
expression="execution(public * com.bjsxt.registration.service.*.*(..))" />
<aop:advisor pointcut-ref="bussinessService"
advice-ref="txAdvice" />
</aop:config>
-->
<tx:annotation-driven transaction-manager="txManager"/>
<!--
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="exists" read-only="true" />
<tx:method name="add*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
-->
</beans>


以上是我的配置,看有什么问题
ycg_zhm1017 2011-04-28
  • 打赏
  • 举报
回复
你没有依赖注入吧
chenmiaoquan2008 2011-04-26
  • 打赏
  • 举报
回复
提供一个无参数的构造方法
fujilin 2011-04-25
  • 打赏
  • 举报
回复
加分顶一下!
fujilin 2011-04-21
  • 打赏
  • 举报
回复
init()这个方法从构造函数里去掉了,但是还是不行!!
icehaopan 2011-04-20
  • 打赏
  • 举报
回复
java.lang.NoSuchMethodException: com.fu3.office.factor.Impl.PaginationHibernate.<init>()
init()这个方法从构造函数里去掉。
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lrbyantai 的回复:]

No default constructor found;

添加默认无参构造函数
[/Quote]

正解
蛋黄车 2011-04-19
  • 打赏
  • 举报
回复
No default constructor found;

添加默认无参构造函数
fujilin 2011-04-19
  • 打赏
  • 举报
回复
我添加了一个默认无参构造函数,但是还是报一样的错

@Component("Pagination")
public class PaginationHibernate implements Pagination {
private int limit ;
private int start ;
private String hql;


public PaginationHibernate(){
getMaxElements();
}

public PaginationHibernate(String hql, int start, int limit){
this.hql = hql;
this.start = start;
this.limit = limit;
init();
}
jumpheightway 2011-04-19
  • 打赏
  • 举报
回复
注释注入不就行了

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧