[SPRING] Autowiring :이 종속성에 대한 autowire 후보가 될 것으로 예상되는 적어도 하나의 bean
SPRINGAutowiring :이 종속성에 대한 autowire 후보가 될 것으로 예상되는 적어도 하나의 bean
좋아, 나는 같은 주제에 대해 많은 질문이 있다는 것을 알고있다. 하지만 아무것도 작동하지 않는 것 같습니다. 내가 아직 자동 배선 개념을 완전히 이해하지 못했을 수도 있습니다. 내 문제: 필요한 페이지로 갈 수 있지만, 아무 버튼이나 클릭 할 때마다 스프링이 콩을 올바르게 매핑 할 수 있다고 생각되는 것처럼 보이지 않는 널 포인터 예외가 발생합니다.
그래서, @ autowired = true를 추가하면, 그것은 위의 주어진 exceptionn을 제공합니다. 나는 무엇이해야 할 지 모르겠다. 누군가가 나를 도와 줄 수 있기를 희망한다. 설명도 좋아할 것입니다 :) 암호:
@Entity
@Table(name="userDetails")
public class UserDetailModel {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public int user_id;
public String password;
public String user_name;
public String active_status;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public int getUser_id() {
return user_id;
}
public void setUser_id(int user_id) {
this.user_id = user_id;
}
public String getActive_status() {
return active_status;
}
public void setActive_status(String active_status) {
this.active_status = active_status;
}
}
제어 장치:
@RestController
public class UserDetailController {
private Logger logger = (Logger) LoggerFactory.getLogger(UserDetailController.class);
@Autowired(required = true)
private UserRepository userRepository;
@RequestMapping(value="/login", method = RequestMethod.POST)
public @ResponseBody String addNewUser (@RequestBody UserDetailModel user) {
// @ResponseBody means the returned String is the response, not a view name
// @RequestParam means it is a parameter from the GET or POST request
logger.debug("in controller");
UserDetailModel userDtl = new UserDetailModel();
userDtl.setUser_id(user.user_id);
userDtl.setUser_name(user.user_name);
userDtl.setActive_status(user.active_status);
userDtl.setPassword(user.password);
userRepository.save(userDtl);
return "Saved";
}
}
저장소:
@Repository
public interface UserRepository extends CrudRepository<UserDetailModel, Long> {}
스택 추적 :
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDetailController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.springBoot.usl.repo.UserRepository com.springBoot.usl.controller.UserDetailController.userRepository; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.springBoot.usl.repo.UserRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:703)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:120)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:683)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:313)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:944)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:933)
at com.springBoot.usl.controller.WebAppInitializer.main(WebAppInitializer.java:18)
응답에 따라 해결됨 대답: 나는 제이와 루이의 대답을 바탕으로 몇 가지 수정을했다. 그리고 내 ApplicationConfig 파일에서 다음과 같이 주석을 변경했습니다.
@Configuration
@ComponentScan("my.basepackage.*")
@EnableJpaRepositories(basePackages = {"my.basepackage.*"})
@EntityScan("my.basepackage.*")
@EnableAutoConfiguration
희망이 어떤 도움이됩니다.
그러나 *가 올바른 방향인지 확실하지 않습니다.
해결법
-
==============================
1.어노테이션 측면에서 몇 가지 변경 사항을 적용하여 애플리케이션을 실행할 수 있습니다.
어노테이션 측면에서 몇 가지 변경 사항을 적용하여 애플리케이션을 실행할 수 있습니다.
문제가되는 동일한 수업을 사용했습니다. 사용 된 구조 및 구성은 아래를 참조하십시오. 디렉토리 구조
나는 아래와 같이 꾸러미를 사용했고 수업을 추가했다. com.rcmutha.usl.controller com.rcmutha.usl.repository
@SpringBootApplication @ComponentScan({"com.rcmutha*"}) @EntityScan("com.rcmutha*") @EnableJpaRepositories("com.rcmutha*") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
전체 코드 : 코드를 보려면 여기를 클릭하십시오.
-
==============================
2.귀하의 응용 프로그램이 UserRepository 클래스를 검사 할 수 없다고 생각합니다. Spring Boot를 사용하고 있다면 패키지 계층의 최상위에 기본 클래스를 놓아야합니다.
귀하의 응용 프로그램이 UserRepository 클래스를 검사 할 수 없다고 생각합니다. Spring Boot를 사용하고 있다면 패키지 계층의 최상위에 기본 클래스를 놓아야합니다.
또한 @EnableJpaRepositories를 사용하여 리포지토리의 기본 패키지에 리포지토리 기능을 사용하도록 설정해야합니다.
@EnableJpaRepositories (basePackages = { "com.springBoot.usl.repo"})
-
==============================
3.설정 클래스에서 JPA 저장소를 활성화하고 저장소가 포함 된 패키지를 아래와 같이 지정해야합니다
설정 클래스에서 JPA 저장소를 활성화하고 저장소가 포함 된 패키지를 아래와 같이 지정해야합니다
@Configuration @EnableJpaRepositories(basePackages = { "com.springBoot.usl.repo" }) public class ApplicationConfig { }
ApplicationConfig의 예 :
@Configuration @EnableJpaRepositories(basePackages = {"com.springBoot.usl.repo"}) @EnableTransactionManagement public class ApplicationConfig { @Bean public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/xxxx"); dataSource.setUsername("xxxx"); dataSource.setPassword("xxxx"); return dataSource; } @Bean public EntityManagerFactory entityManagerFactory() { HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); vendorAdapter.setGenerateDdl(true); LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); factory.setJpaVendorAdapter(vendorAdapter); factory.setPackagesToScan("xx.xxxx.xxxx.xxxx.domain"); factory.setDataSource(dataSource()); factory.afterPropertiesSet(); return factory.getObject(); } @Bean public PlatformTransactionManager transactionManager() { JpaTransactionManager txManager = new JpaTransactionManager(); txManager.setEntityManagerFactory(entityManagerFactory()); return txManager; }
-
==============================
4.UserRepository는 현재 Spring 문맥에서 단순히 정의되지 않는다. 클래스가 Spring에서 스캔 한 패키지에 정의되어 있는지 확인하십시오. Spring이 패키지를 스캔하게하려면 Configuration 클래스에서 @ComponentScan ( "org.my.pkg")을 사용해야 할 것이다.
UserRepository는 현재 Spring 문맥에서 단순히 정의되지 않는다. 클래스가 Spring에서 스캔 한 패키지에 정의되어 있는지 확인하십시오. Spring이 패키지를 스캔하게하려면 Configuration 클래스에서 @ComponentScan ( "org.my.pkg")을 사용해야 할 것이다.
Spring Boot를 사용하고 있다면, @ComponentScan을 포함하고있는 다른 클래스 위의 루트 패키지에서 @SpringBootApplication으로 주석이 달린 메인 애플리케이션 클래스를 찾아야한다.
from https://stackoverflow.com/questions/44149690/autowiring-expected-at-least-1-bean-which-qualifies-as-autowire-candidate-for-t by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트로 CORS 문제 (0) | 2019.04.25 |
---|---|
[SPRING] 스프링 보안 Oauth2에서 XML을 사용하여 / oauth / check_token을 활성화하는 방법 (0) | 2019.04.25 |
[SPRING] Spring 및 Tomcat의 인덱스 페이지에서 리디렉션 (0) | 2019.04.25 |
[SPRING] 봄 부팅 : URL에서 jsessionid 제거 (0) | 2019.04.25 |
[SPRING] 스프링 배치 프로세서 프로세스 () 메소드에서 Spring 배치 작업 시작 메소드로 예외를 던지려면? (0) | 2019.04.25 |