java - Spring Bean Creation at Runtime -
i'm trying create beans @ runtime using @configuration , @bean annotations. reason trying have spring aware of created beans can handle scheduling application creating. i've defined annotated class so:
@configuration public class gathererconfigbean { @bean(name = "factorybean") public methodinvokingjobdetailfactorybean createmethodinvokingjobdetail(string service, object obj, string method) throws classnotfoundexception, nosuchmethodexception{ methodinvokingjobdetailfactorybean jobdetailfactory = new methodinvokingjobdetailfactorybean(); jobdetailfactory.setbeanname(service + "factorybean"); jobdetailfactory.settargetobject(obj); jobdetailfactory.settargetmethod(method); jobdetailfactory.setconcurrent(false); jobdetailfactory.afterpropertiesset(); return jobdetailfactory; } @bean(name = "triggerbean") public crontriggerbean createtriggerbean(string service, jobdetail job, string schedule) throws parseexception{ crontriggerbean trigger = new crontriggerbean(); trigger.setbeanname(service + "triggerbean"); trigger.setjobdetail(job); trigger.setcronexpression(schedule); return trigger; } public crontrigger createtrigger(string service, jobdetail job, string schedule) throws parseexception{ return createtriggerbean(service, job, schedule); } public jobdetail createjobdetail(string service, abstractgatherer obj, string method) throws classnotfoundexception, nosuchmethodexception{ return (jobdetail) createmethodinvokingjobdetail(service, obj, method).getobject(); } } the problem when run following exceptions , have been unable find similar example of doing on-line. originally, had thought because have same name, doesn't seem case because when run 1 same error.
exception in thread "main" org.springframework.beans.factory.unsatisfieddependencyexception: error creating bean name 'factorybean' defined in class path resource [com/linuxbox/enkive/statistics/gathering/gathererconfigbean.class]: unsatisfied dependency expressed through constructor argument index 0 of type [java.lang.string]: : no matching bean of type [java.lang.string] found dependency: expected @ least 1 bean qualifies autowire candidate dependency. dependency annotations: {}; nested exception org.springframework.beans.factory.nosuchbeandefinitionexception: no matching bean of type [java.lang.string] found dependency: expected @ least 1 bean qualifies autowire candidate dependency. dependency annotations: {} related cause: org.springframework.beans.factory.beancurrentlyincreationexception: error creating bean name 'factorybean': requested bean in creation: there unresolvable circular reference? @ org.springframework.beans.factory.support.constructorresolver.createargumentarray(constructorresolver.java:730) @ org.springframework.beans.factory.support.constructorresolver.instantiateusingfactorymethod(constructorresolver.java:461) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.instantiateusingfactorymethod(abstractautowirecapablebeanfactory.java:983) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbeaninstance(abstractautowirecapablebeanfactory.java:879) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:485) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory.java:456) @ org.springframework.beans.factory.support.abstractbeanfactory$1.getobject(abstractbeanfactory.java:291) @ org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry.java:222) @ org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:288) @ org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:190) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.preinstantiatesingletons(defaultlistablebeanfactory.java:563) @ org.springframework.context.support.abstractapplicationcontext.finishbeanfactoryinitialization(abstractapplicationcontext.java:895) @ org.springframework.context.support.abstractapplicationcontext.refresh(abstractapplicationcontext.java:425) @ org.springframework.context.support.classpathxmlapplicationcontext.<init>(classpathxmlapplicationcontext.java:139) @ org.springframework.context.support.classpathxmlapplicationcontext.<init>(classpathxmlapplicationcontext.java:93) @ com.linuxbox.enkive.main.run(main.java:54) @ com.linuxbox.enkive.mainjettywebapps.main(mainjettywebapps.java:53) caused by: org.springframework.beans.factory.nosuchbeandefinitionexception: no matching bean of type [java.lang.string] found dependency: expected @ least 1 bean qualifies autowire candidate dependency. dependency annotations: {} @ org.springframework.beans.factory.support.defaultlistablebeanfactory.raisenosuchbeandefinitionexception(defaultlistablebeanfactory.java:920) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.doresolvedependency(defaultlistablebeanfactory.java:789) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.resolvedependency(defaultlistablebeanfactory.java:703) @ org.springframework.beans.factory.support.constructorresolver.resolveautowiredargument(constructorresolver.java:795) @ org.springframework.beans.factory.support.constructorresolver.createargumentarray(constructorresolver.java:723) ... 16 more related cause: org.springframework.beans.factory.beancurrentlyincreationexception: error creating bean name 'factorybean': requested bean in creation: there unresolvable circular reference? @ org.springframework.beans.factory.support.defaultsingletonbeanregistry.beforesingletoncreation(defaultsingletonbeanregistry.java:297) @ org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry.java:216) @ org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:288) @ org.springframework.beans.factory.support.abstractbeanfactory.gettypeforfactorybean(abstractbeanfactory.java:1343) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.gettypeforfactorybean(abstractautowirecapablebeanfactory.java:678) @ org.springframework.beans.factory.support.abstractbeanfactory.istypematch(abstractbeanfactory.java:507) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.getbeannamesfortype(defaultlistablebeanfactory.java:317) @ org.springframework.beans.factory.beanfactoryutils.beannamesfortypeincludingancestors(beanfactoryutils.java:185) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.findautowirecandidates(defaultlistablebeanfactory.java:829) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.doresolvedependency(defaultlistablebeanfactory.java:786) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.resolvedependency(defaultlistablebeanfactory.java:703) @ org.springframework.beans.factory.support.constructorresolver.resolveautowiredargument(constructorresolver.java:795) @ org.springframework.beans.factory.support.constructorresolver.createargumentarray(constructorresolver.java:723) @ org.springframework.beans.factory.support.constructorresolver.instantiateusingfactorymethod(constructorresolver.java:461) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.instantiateusingfactorymethod(abstractautowirecapablebeanfactory.java:983) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbeaninstance(abstractautowirecapablebeanfactory.java:879) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:485) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory.java:456) @ org.springframework.beans.factory.support.abstractbeanfactory$1.getobject(abstractbeanfactory.java:291) @ org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry.java:222) @ org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:288) @ org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:190) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.preinstantiatesingletons(defaultlistablebeanfactory.java:563) @ org.springframework.context.support.abstractapplicationcontext.finishbeanfactoryinitialization(abstractapplicationcontext.java:895) @ org.springframework.context.support.abstractapplicationcontext.refresh(abstractapplicationcontext.java:425) @ org.springframework.context.support.classpathxmlapplicationcontext.<init>(classpathxmlapplicationcontext.java:139) @ org.springframework.context.support.classpathxmlapplicationcontext.<init>(classpathxmlapplicationcontext.java:93) @ com.linuxbox.enkive.main.run(main.java:54) @ com.linuxbox.enkive.mainjettywebapps.main(mainjettywebapps.java:53) any help, feedback, ideas, or suggestions appreciated, , let me know if need more specific information!
i suggest use @postconstruct annotation on 1 of method needs executed after dependency injection performed. have @ link know more it.
one more way make class implement applicationcontextaware interface access application context. more details on please refer link.
hope helps you. cheers.
Comments
Post a Comment