- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我发现许多门户网站都解释了类似的问题。但我想这是独特的情况。我在 spring mvc 应用程序中遇到错误。
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'testController' defined in file [C:\Program Files (x86)\sts-bundle\pivotal-tc-server-developer-3.1.2.RELEASE\base-instance\wtpwebapps\ExpT1\WEB-INF\classes\com\expt\controller\TestController.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [com.expt.repositories.CategoryRepository]: No qualifying bean of type [com.expt.repositories.CategoryRepository] 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 qualifying bean of type [com.expt.repositories.CategoryRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749)
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185)
.....
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.expt.repositories.CategoryRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1373)
代码如下。我认为已经复制了足够的代码。请帮助我了解缺少什么以及如何解决这个问题。任何帮助都会很棒...!!代码:初始化器:
package com.expt.config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class AppInitialzer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
// TODO Auto-generated method stub
return new Class[]{SpringAppContInit.class, SQLDevDataSource.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
// TODO Auto-generated method stub
return new Class[]{WebMvcConfig.class};
}
@Override
protected String[] getServletMappings() {
// TODO Auto-generated method stub
return new String[]{"/"};
}
}
SQLDEV配置:
package com.expt.config;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@Configuration
@Profile("SQLDev")
@EnableJpaRepositories(basePackages={"com.expt.repositories"})
public class SQLDevDataSource extends AbstractJpaConfig {
@Override
public DataSource getDataSource() {
// TODO Auto-generated method stub
return createBasicDataSource("jdbc:jtds:sqlserver://LOCAL:1433/MYDB;", "net.sourceforge.jtds.jdbc.Driver", "UNMA", "PWD123");
}
public BasicDataSource createBasicDataSource(String jdbcUrl, String driverClass, String userName, String password) {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl(jdbcUrl);
dataSource.setDriverClassName(driverClass);
dataSource.setUsername(userName);
dataSource.setPassword(password);
return dataSource;
}
}
SpringAPpContInit:
package com.expt.config;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
public class SpringAppContInit implements ApplicationContextInitializer<AnnotationConfigWebApplicationContext> {
@Override
public void initialize(AnnotationConfigWebApplicationContext applicationContext) {
// TODO Auto-generated method stub
ConfigurableEnvironment configEnv = applicationContext.getEnvironment();
configEnv.addActiveProfile("SQLDev");
}
}
AbstrackJpa配置:
package com.expt.config;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.spi.PersistenceProvider;
import javax.sql.DataSource;
import org.hibernate.dialect.SQLServer2008Dialect;
import org.hibernate.jpa.HibernatePersistenceProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.orm.jpa.JpaDialect;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import com.expt.domain.Category;
public abstract class AbstractJpaConfig {
public abstract DataSource getDataSource();
@Bean(name="entityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource){
Map<String, String> properties = new HashMap<String, String>();
properties.put(org.hibernate.cfg.Environment.HBM2DDL_AUTO, "validate");
properties.put(org.hibernate.cfg.Environment.DIALECT, SQLServer2008Dialect.class.getName());
properties.put(org.hibernate.cfg.Environment.SHOW_SQL, "true");
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource);
//em.setPackagesToScan(Expense.class.getPackage().getName());
em.setPackagesToScan(Category.class.getPackage().getName());
//em.setPersistenceProvider(new HibernatePersistenceProvider());
em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
em.setJpaPropertyMap(properties);
return em;
}
@Bean(name = "transactionManager")
public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
Controller :
package com.expt.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.expt.domain.Category;
import com.expt.repositories.CategoryRepository;
@RestController
@RequestMapping("/test")
public class TestController {
CategoryRepository catRepo;
@Autowired
public TestController(CategoryRepository catRepo) {
this.catRepo = catRepo;
}
/*private CategoryService catSvc;
@Autowired
public TestController(CategoryService catSvc) {
this.catSvc = catSvc;
}*/
@RequestMapping("/simple")
public String test(){
return "testing";
}
@RequestMapping("/json")
public Iterable<Category> testJ(){
return catRepo.findAll();
}
}
类别存储库:
package com.expt.repositories;
import java.math.BigDecimal;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.expt.domain.Category;
@Repository
public interface CategoryRepository extends JpaRepository<Category, BigDecimal> {
}
================================================== =========
编辑:(由于添加了很多评论,因此也考虑添加这些详细信息)
我指的是https://github.com/scottfrederick/spring-music 。它使用公共(public)类AppInitializer实现WebApplicationInitializer
作为appinitializer。
完整代码在这里,是我在旧项目中使用的。这确实手动注册了配置类并且它正在工作。但当我们从 AbstractAnnotationConfigDispatcherServletInitializer
扩展时就不需要了。
public class AppInitializer implements WebApplicationInitializer{
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
// TODO Auto-generated method stub
configureAppContextInitializers(servletContext, SpringAppContInit.class.getName());
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.register(RepositoryConfig.class);
servletContext.addListener(new ContextLoaderListener(rootContext));
AnnotationConfigWebApplicationContext webContext = new AnnotationConfigWebApplicationContext();
webContext.register(WebMvcConfig.class);
DispatcherServlet dispatcherServlet = new DispatcherServlet(webContext);
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", dispatcherServlet);
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
private void configureAppContextInitializers(ServletContext container, String... initClassNames) {
String initializerClasses = container.getInitParameter(ContextLoader.CONTEXT_INITIALIZER_CLASSES_PARAM);
String delimitedClassNames = StringUtils.arrayToDelimitedString(initClassNames, " ");
if (StringUtils.hasText(initializerClasses)) {
initializerClasses += " " + delimitedClassNames;
}
else {
initializerClasses = delimitedClassNames;
}
container.setInitParameter(ContextLoader.CONTEXT_INITIALIZER_CLASSES_PARAM, initializerClasses);
}
}
如果是 AbstractAnnotationConfigDispatcherServletInitializer
,方法 getRootConfigClasses
和 getServletConfigClasses
会隐式进行注册。现在我正在寻找上面代码的原因不管用。我有解决方法,例如可以通过恢复到 XML 或 WebApplicationInitializer 来使其工作。我正在寻找解决方案和原因(如果可能的话)使用更新的代码而不是 API 文档。我需要一个教程。 API文档无法帮助我解决问题。
最佳答案
您自己的 WebApplicationInitializer
实现和扩展 AbstractAnnotationConfigDispatcherServletInitializer
的实现是不同的。它们的行为不同,这是因为您没有注册自定义 ApplicationContextInitializer
。 javadoc 中解释了如何注册 ApplicationContextInitializer
(请注意设置 ApplicationContextInitializer
集合的 2 个方法。)。
public class AppInitialzer extends AbstractAnnotationConfigDispatcherServletInitializer {
...
protected ApplicationContextInitializer<?>[] getRootApplicationContextInitializers() {
return new ApplicationContextInitializer[] { new SpringAppContInit() } ;
}
}
但是,ApplicationContextInitializer
并没有真正添加任何通过简单设置环境或系统属性无法完成的内容。
spring.profiles.active=SQLDev
当你这样做时,你不需要那个 init。
我也坚信您的 @EnableJpaRepositories
属于错误的类,您想要启用这些的事实不应该取决于您的个人资料。
关于java - NoSuchBeanDefinition异常 : No qualifying bean of type [Repository] found for dependency: expected at least 1 bean which qualifies as autowire,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37498024/
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我是脚本新手。如何编写 Expect 脚本以通过 ssh 连接到设备并提示用户输入密码?我们使用 pin + RSA token 代码作为密码,因此我无法存储密码。 #!/usr/bin/expect
我编写了以下代码并尝试执行它。但我在执行 do {”时遇到“无效的命令名称“do”” 代码: #!/usr/bin/expect set val 0; set input 5; do { pu
我已经查看了 Expect 联机帮助页并用 Google 搜索了它,但我还没有找到 expect 的 -r 是什么。我看到这个选项以前是这样用的 expect -r "\r\n\r\n" 在 expe
我的 shebang 看起来像这样: #!/usr/bin/expect -d 当我从命令行运行脚本时,它会提供我想要的内容。 但是,我通过 crontab 运行这个脚本。是否可以将调试开关保持打开状
我是 Expect 脚本的新手。 我在 Linux 机器上为 ssh 编写了一个 Expect 脚本,在那里我在 ssh 到不同的 Linux 机器时遇到了问题。下面我复制了脚本。 !/usr/loc
Scene 1, Layer 'script', Frame 1, Line 9 1084: Syntax error: expecting identifier before this. Sc
我正在运行调试命令以将命令的输出记录到文件中。我尝试了 log_file 命令,但它没有记录输出。我的代码如下: log_file -a gdb.txt send "~/debugulator.sh
我希望 expect_user 有一个无限的(或非常大的)超时和 expect 的默认超时。有没有办法设置不同的超时?或者我是否只需要在每次更改用途之前手动执行此操作? 最佳答案 expect 和ex
我正在学习 iOS 编程(我来自 Android),我正在寻找更容易获取字符串的方法。有了这个建议,我定义了下一个宏并在一些代码片段中使用它: #define STRING_BASE @"InfoPl
你好我是 rspec 的新手,我想弄清楚将 block 传递给 expect{} 和只使用 expect() 之间的区别 这是一个简单的例子 require "rails_helper" RSpec.
我正在尝试为 React JS 运行单元测试 - 使用 jest/enzyme。 目前测试失败。不太清楚为什么,也许我没有正确调用 expect(wrapper.find)。这是我测试的一部分: F
例如,现在我有一个“root.exp”期望脚本如下: spawn ssh user@ip expect "Password:" send "password" 然后,我要发送到这个ssh服务器的exp
您好,我是 Expect 脚本编写的新手,我一直在尝试使用以下方法将 IP 地址获取到变量中: set timeout -1 spawn $env(SHELL) match_max 100000 se
expect.anything() 不适用于 expect.toBe(),但适用于 expect.toEqual() test("this will pass", () => { expect("
我有一个如下所示的简单脚本,从命令行读取 2 个数字并将它们加在一起: $cat runexp.sh #!/bin/bash echo "read 1st number" read n1 echo "
当 Linux 机器的 $IP 登录后询问密码时,下面的 expect 脚本工作正常 但在某些情况下,某些Linux机器不需要ssh密码(我们可以不用密码登录), 所以我需要更改我的期望脚本以支持没有
我正在尝试使用 expect 远程登录服务器并更改用户密码。该应用程序要求,如果您要更改的密码包含特殊字符,则将其引用。问题是,还需要引用 expect send 语句,当我尝试将两者结合起来时,脚本
下面这个简单的 expect 脚本的目标是获取远程机器上的 hostname 名称 有时期望脚本无法执行到 $IP_ADDRESS 的 ssh(因为远程机器不活动等) 所以在这种情况下,expect
我试图创建一个宏来替换, first: Some(first.as_ref().parse::().expect("Could not parse 'first'")) 我在其他模块(如 Clap w
我是一名优秀的程序员,十分优秀!