我通过使用Spring和Hibernate创build实体,服务和JUnittesting来开始我的项目。 所有这一切都很好。 然后我已经添加了spring-mvc来使这个Web应用程序使用许多不同的分步教程,但是当我尝试使用@Autowired注释来制作Controller时,我在部署期间从Glassfish中收到错误。 我想,由于某种原因,spring没有看到我的服务,但经过多次尝试,我仍然无法处理它。 testing与服务 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:/beans.xml"}) 和 @Autowired MailManager mailManager; 正常工作。 没有@Autowired控制器,我可以打开我的项目在Web浏览器没有任何困难。 /src/main/resources/beans.xml <?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:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"> <context:property-placeholder location="jdbc.properties" /> <context:component-scan base-package="pl.com.radzikowski.webmail"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <!–<context:component-scan base-package="pl.com.radzikowski.webmail.service" />–> <bean […]
经过几天的尝试,并在springource论坛上等待的答案,我会在这里尝试。 运行我的应用程序导致这些exception: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.example.my.services.user.UserService] 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)} org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:924) org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:793) org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:707) org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478) org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631) org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588) org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645) org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508) org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449) org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133) javax.servlet.GenericServlet.init(GenericServlet.java:212) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) […]
背景: 我有一个Spring 2.5 / Java / Tomcat应用程序。 有下面的bean,在许多地方在整个应用程序中使用 public class HibernateDeviceDao implements DeviceDao 和下面这个新的bean: public class JdbcDeviceDao implements DeviceDao 第一个bean是这样configuration的(包中的所有bean都包含在内) <context:component-scan base-package="com.initech.service.dao.hibernate" /> 第二个(新)bean是单独configuration的 <bean id="jdbcDeviceDao" class="com.initech.service.dao.jdbc.JdbcDeviceDao"> <property name="dataSource" ref="jdbcDataSource"> </bean> 这导致(当然)在启动服务器时出现exception: 嵌套的exception是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义types为[com.sevenp.mobile.samplemgmt.service.dao.DeviceDao]的唯一bean:期望的单个匹配的bean,但find2:[deviceDao,jdbcDeviceDao] 从一个类尝试自动assembly这样的bean @Autowired private DeviceDao hibernateDevicDao; 因为有两个bean实现相同的接口。 问题是: 是否有可能configuration豆,以便 1.我不必对现有的已经有了HibernateDeviceDao自动assembly的类进行修改 2.仍然可以像这样使用第二个(新)bean: @Autowired @Qualifier("jdbcDeviceDao") 也就是说,我需要一种方法来configurationHibernateDeviceDao bean作为自动assembly的默认bean,同时允许在使用@Qualifier批注明确指定时使用JdbcDeviceDao 。 我已经尝试过了: 我尝试设置属性 autowire-candidate="false" 在JdbcDeviceDao的beanconfiguration中: <bean id="jdbcDeviceDao" class="com.initech.service.dao.jdbc.JdbcDeviceDao" […]
我知道@Component注解是在Spring 2.5中引入的,以便通过使用类path扫描来摆脱xml bean的定义。 @Bean是在Spring 3.0中引入的,可以和@Configuration一起使用,以便完全摆脱xml文件并使用java config。 是否有可能重新使用@Component注释而不是引入@Bean注释? 我的理解是,最终的目标是在这两种情况下创buildbean。
在Spring中将使用@Autowired类的优点和缺点是什么? 为了澄清,我正在专门讨论@Autowired注释,而不是XML中的自动连线。 我可能只是不理解它,但对我来说,它几乎看起来像一个反模式 – 你的class级开始意识到,他们是绑定到DI框架,而不是仅仅是POJO。 也许我是一个贪婪的惩罚,但我喜欢有外部的XMLconfiguration豆,我喜欢有明确的布线,所以我知道究竟是什么有线的地方。
这是我的代码: public class Main { public static void main(String[] args) { Main p = new Main(); p.start(args); } @Autowired private MyBean myBean; private void start(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("META-INF/config.xml"); System.out.println("my beans method: " + myBean.getStr()); } } @Service public class MyBean { public String getStr() { return "string"; } } <beans xmlns="http://www.springframework.org/schema/beans" […]
我正在使用Spring 3.0.5,并尽可能为我的类成员使用@Autowire注释。 我需要自动assembly的一个bean需要参数给它的构造函数。 我已经浏览了Spring文档,但似乎无法find如何注释构造函数参数的任何参考。 在XML中,我可以使用它作为bean定义的一部分。 有@Autowire注释类似的机制? 例如: @Component public class MyConstructorClass{ String var; public MyConstructorClass( String constrArg ){ this.var = var; } … } @Service public class MyBeanService{ @Autowired MyConstructorClass myConstructorClass; …. } 在这个例子中,我如何使用@Autowire注解在MyBeanService中指定“constrArg”的值? 有没有办法做到这一点? 谢谢, 埃里克
我正在浏览SpringSource上的一些博客,其中一位博客作者正在使用@Inject ,我想他也可以使用@Autowired 这是一段代码: @Inject private CustomerOrderService customerOrderService; 我不确定@Inject和@Autowired之间的区别,如果有人能解释在什么情况下使用哪个区别以及使用哪个区别,我将不胜感激。
下面的问题了解Spring @Autowired的用法,我想创build一个完整的知识库,用于弹簧布线的另一个选项@Configuration类。 假设我有一个spring的XML文件,如下所示: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <import resource="another-application-context.xml"/> <bean id="someBean" class="stack.overflow.spring.configuration.SomeClassImpl"> <constructor-arg value="${some.interesting.property}" /> </bean> <bean id="anotherBean" class="stack.overflow.spring.configuration.AnotherClassImpl"> <constructor-arg ref="someBean"/> <constructor-arg ref="beanFromSomewhereElse"/> </bean> </beans> 我怎样才能使用@Configuration ? 它对代码本身有什么影响吗?
我有这个springconfiguration: <bean id="boo" class="com.x.TheClass"/> TheClass类实现TheInterface 。 然后我有这个(假设的)Java代码: @Autowired TheInterface x; @Autowired TheClass y; TheInterface的自动TheInterface工作,但TheInterface的自动TheClass失败。 Spring给了我一个NoSuchBeanDefinitionException的类。 为什么你可以连接界面而不是class级?