2015-08-07 3 views
2

я этот класскак Spring называет аргументированных Constructor

@Component 
public class Workflow{ 

с дефолтом и аргумент конструктора что-то вроде этого

public Workflow(GraphModel graph, JSONObject state, String md5Hash) 
      throws InvalidGraphException { 
     this(graph); 
     this.setState(state); 
     this.setMd5Hash(md5Hash); 
    } 

теперь, когда я использую

@Autowired 
Workflow workflow; 

это работает просто отлично , но я хочу вызвать конструктор с аргументами., Как можно Я этого добился?

Обратите внимание я попытался создать компонент, как этот

@Configuration 
@ComponentScan("com.xyz.abc.*") 
public class BlueBerryBeansConfiguration { 
    @Bean 
public Workflow getWorkflow(GraphModel graph, JSONObject getJson, 
     String getmd5) throws InvalidGraphException { 
    return new Workflow(graph, getJson, getmd5); 
} 



@Bean 
public JSONObject getJson() { 
    return new JSONObject(); 
} 

@Bean 
public String getmd5() { 
    return new String(); 
} 

} 

и Workflow конструктору

@Autowired 
    public Workflow(GraphModel graph, JSONObject state, String md5Hash) 
      throws InvalidGraphException { 
     this(graph); 
     this.setState(state); 
     this.setMd5Hash(md5Hash); 
    } 

    public Workflow(GraphModel graph) throws InvalidGraphException { 
     this.setUnpackedGraph(graph); 
    } 

я получаю нулевой указатель, исключение имеет смысл для меня, но как я могу решить ее> ?

Просьба предоставить ценную информацию. Благодарю.

ответ

0

я изменил свой подход, потому что то, что я узнал,

@Bean 
public Workflow getWorkflow(GraphModel graph, JSONObject getJson, 
     String getmd5) throws InvalidGraphException { 
    return new Workflow(graph, getJson, getmd5); 
} 

согласно выше кода я должен объявить GraphModel, JSONObject и getmd5 как бобы, а что вызывает еще один вопрос, как GraphModel и JSONObject имеют не нет конструкторов аргументов, поэтому я должен объявить их как бобы, чтобы сформировать сложный цикл.

Так что, если ваш случай также, как у меня, то это лучше назвать

@Autowired 
Workflow workflow; 

и затем явно устанавливая график и JSon объектов. это не 100% ответ, но это работает. Надеюсь, когда-нибудь я найду правильное решение. И если вы читаете это и думаете иначе и имеете лучшее решение, тогда прокомментируйте.

1

Использование @Autowired Аннотации к конструктору должны это сделать. Если он не работает, попробуйте удалить конструктор по умолчанию, если он у вас есть.

+0

см. Мое описание еще раз, так как я внесли некоторые изменения, – Roxy

+0

Либо образцы, которые вы предоставили позже (используя @Autowired и @Bean), выглядят правильно. Может быть, он посмотрел бы на полный код. – Sanjay