问题标签 [spring-annotations]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 我不能将@Value 注释与@Transient 注释一起使用吗?
我有一个类来映射一个使用休眠的表。我想忽略一些变量以将映射用作常量。我想从属性中加载常量值,所以我这样编码:
但是, 的值MY_VALUE
始终设置为 0。我不能将 @Transient 注释与 @Value 注释一起使用吗?还是我错过了其他东西?
java - 是否可以保证调用@PostConstruct 方法的顺序?
我有一个使用 Spring 进行依赖注入的系统。我使用基于注释的自动装配。bean 是通过组件扫描发现的,即我的上下文 XML 包含以下内容:
我在下面创建了一个点头示例来说明我的问题。
有一个Zoo
which 是Animal
对象的容器。的开发者在开发过程Zoo
中不知道Animal
将包含哪些对象Zoo
;Spring 实例化的具体Animal
对象集在编译时是已知的,但是有各种构建配置文件会导致各种Animal
s 集,并且Zoo
在这些情况下不能更改代码。
的目的Zoo
是允许系统的其他部分(此处显示为ZooPatron
)在运行时访问Animal
对象集,而无需显式依赖某些Animal
s。
实际上,具体的Animal
类都将由各种 Maven 工件贡献。我希望能够通过简单地依赖包含这些具体Animal
的各种工件来组装我的项目的分发,并在编译时正确地自动装配所有内容。
我试图通过让个人Animal
s 依赖 ,来解决这个问题(不成功) Zoo
,以便他们可以在Zoo
during上调用注册方法@PostConstruct
。这避免了Zoo
显式依赖Animal
s 的显式列表。
这种方法的问题是,只有在所有s 都注册Zoo
后,客户才希望与它进行交互。在编译时已知有限的s 集,并且注册都发生在我生命周期的 Spring 连接阶段,因此订阅模型应该是不必要的(即我不希望在运行时添加s )。Animal
Animal
Animal
Zoo
不幸的是,所有的客户Zoo
都只依赖Zoo
. Animal
这与s 与的关系完全相同Zoo
。因此,s 和的@PostConstruct
方法以任意顺序调用。下面的示例代码说明了这一点 - 在调用 on 时,没有s 已注册,它们都注册时是几毫秒后。Animal
ZooPatron
@PostConstruct
ZooPatron
Animal
所以这里有两种类型的依赖,我在 Spring 中很难表达。一旦所有的s都在其中,客户Zoo
只想使用它。Animal
(也许“方舟”会是一个更好的例子......)
我的问题基本上是:解决这个问题的最佳方法是什么?
输出:
接受解决方案的说明
@PostConstruct
基本上答案是:不,如果不去“外部”Spring 或修改它的行为,就不能保证调用的顺序。
这里真正的问题不是我想对@PostConstruct
调用进行排序,这只是依赖关系表达不正确的症状。
如果 的消费者Zoo
依赖于他,Zoo
反过来又依赖于Animal
s,那么一切正常。我的错误是我不想Zoo
依赖明确的Animal
子类列表,因此引入了这种注册方法。正如答案中所指出的,如果没有不必要的复杂性,将自注册机制与依赖注入混合将永远不会起作用。
答案是声明它Zoo
依赖于 s 的集合,Animal
然后允许 Spring 通过自动装配来填充集合。
因此,没有集合成员的硬性列表,它们是由 Spring 发现的,但是依赖关系被正确表达,因此@PostConstruct
方法按我想要的顺序发生。
感谢您的出色回答。
java - Spring 中有没有办法自动装配给定类型的所有依赖项?
我正在@Configurable(autowire=Autowire.BY_TYPE)
为给定的类使用基于注释的连接(即),并且我想将给定类型的所有 bean 作为列表连接到其中:
应用上下文:
自动装配到的类:
所有依赖项都实现了一个通用接口,称为Configurer
有没有办法使这项工作将一个类型的所有依赖项连接到一个集合中并在必要时注入,或者我应该<list>
在 XML 中定义一个或其他什么?
hibernate - org.hibernate.HibernateException:没有活动事务,加载无效
加载用户数据时出现以下错误。
我正在使用 AspectJ 编译时编织和 spring 3.O。和休眠 3.0
下面是我的代码和配置文件。
配置:
提前致谢
java - Spring MVC 控制器继承和路由
在我的 Spring MVC webapp 中,我有一个用于 CRUD 操作的通用 RESTful 控制器。并且每个具体的控制器只需要声明一个@RequestMapping
,例如/foo
。/foo
通用控制器处理所有对和的请求/foo/{id}
。
但现在我需要编写一个更复杂的 CRUD 控制器,它将获得额外的请求参数或路径变量,例如/foo/{date}
和/foo/{id}/{date}
. 所以我扩展了我的通用 CRUD 控制器并编写了重载fetch(id, date)
方法来处理{id}
和{date}
. 那不是问题。
但我还需要“禁用” fetch(id)
从基类派生的实现(资源不能再可用/foo/{id}
,只能在/foo/{id}/{date}
)。我想出的唯一想法是在我的具体控制器中覆盖此方法,将其映射到假 uri 并返回null
。但这看起来很丑陋,因为我们暴露了一些虚假的资源 uri,而不是禁用它。可能有更好的做法吗?
有任何想法吗?
.
java - 为什么我的@Cachable 注释方法不使用 EHCache 缓存结果?
我在 Spring 中有一个拦截器,它自动连接两个不同的服务。这两个服务都有@Cacheable
ehcache-spring-annotations 项目中标记的方法,但使用不同的cacheNames
.
当我运行我的应用程序时,一种方法成功地使用 EHCache 作为结果,而另一种方法则没有。OrganisationInfoSericeImpl.getOrgCustomProfile()
缓存正确,而没有EventServiceImpl.getFolderEvnetsForUser
。有人可以告诉我为什么吗?
我尝试对这两种服务使用相同的缓存,但仍然只有其中一种有效。我为ehcache-spring-annotations打开了DEBUG,它在启动期间注册了这两种方法:
[DEBUG] 08:09:01 () 添加带有属性的 CACHE 建议方法 'getFolderEventsForUser':CacheableAttributeImpl [cache=[ name = ecomOrders status = STATUS_ALIVE forever = false overflowToDisk = false maxElementsInMemory = 100 maxElementsOnDisk = 0 memoryStoreEvictionPolicy = LRU timeToLiveSeconds = 300 timeToIdleSeconds = 0 diskPersistent = false diskExpiryThreadIntervalSeconds = 120 cacheEventListeners:net.sf.ehcache.statistics.LiveCacheStatisticsWrapper hitCount = 0 memoryStoreHitCount = 0 diskStoreHitCount = 0 missCountNotFound = 0 missCountExpired = 0],cacheKeyGenerator = HashCodeCacheKeyGenerator [includeMethod = true,includeParameterTypes = true,useReflection = false, checkforCycles=false], entryFactory=null, exceptionCache=null, parameterMask=ParameterMask [mask=[]]] [] at com.googlecode.ehcache.annotations.impl。CacheAttributeSourceImpl.getMethodAttribute(CacheAttributeSourceImpl.java:174)
[DEBUG] 08:09:01 () 添加带有属性的 CACHE 建议方法 'getOrgCustomProfile':CacheableAttributeImpl [cache=[ name = orgProfile status = STATUS_ALIVE ever = false overflowToDisk = false maxElementsInMemory = 200 maxElementsOnDisk = 0 memoryStoreEvictionPolicy = LRU timeToLiveSeconds = 86400 timeToIdleSeconds = 0 diskPersistent = false diskExpiryThreadIntervalSeconds = 120 cacheEventListeners:net.sf.ehcache.statistics.LiveCacheStatisticsWrapper hitCount = 0 memoryStoreHitCount = 0 diskStoreHitCount = 0 missCountNotFound = 0 missCountExpired = 0],cacheKeyGenerator = HashCodeCacheKeyGenerator [includeMethod = true,includeParameterTypes = true,useReflection = false, checkforCycles=false], entryFactory=null, exceptionCache=null, parameterMask=ParameterMask [mask=[]]] [] at com.googlecode.ehcache.annotations.impl。CacheAttributeSourceImpl.getMethodAttribute(CacheAttributeSourceImpl.java:174)
当拦截器调用自动装配的服务时,只有其中一个缓存:
[DEBUG] 08:09:19 (UNIQUE_ID) 为调用生成密钥“-1668638847278617”:ReflectiveMethodInvocation: public abstract no.finntech.base.modules.organisation.support.OrgCustomProfileBean no.finntech.service.organisation.OrganisationInfoService.getOrgCustomProfile(java .lang.String) 抛出 no.finntech.service.ServiceException;目标属于 [no.finntech.service.organisation.impl.OrganisationInfoServiceImpl] [URI:/finn/minfinn/myitems/list,远程 IP:127.0.0.1,Referer:,用户代理:Mozilla/5.0(Windows NT 6.1 ; WOW64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2] 在 com.googlecode.ehcache.annotations.interceptor.EhCacheInterceptor.generateCacheKey(EhCacheInterceptor.java:272)
编辑:我可能应该提到这两个服务是在不同的 Maven 模块中定义的。
java - 使用 Java Spring 3.0 @NumberFormat 注解
我目前正在做一个小项目,试图让 Java 春季验证在 Web 表单上工作。它确实有效,但是我有一个用于输入年龄的输入,然后我使用此注释将其转换为数字格式,如果我输入字母,则会在提交表单时将其显示在输入框旁边:
“无法将 java.lang.String 类型的属性值转换为属性年龄所需的 java.lang.Integer 类型;嵌套异常是 org.springframework.core.convert.ConversionFailedException:无法从 java.lang 类型转换值“dasdf” .String 类型为 java.lang.Integer;嵌套异常是 java.lang.IllegalArgumentException:无法解析 dasdf"
有什么办法可以改变这个消息,我确定很简单,但是已经搜索并找不到它。
这是当前的验证码:
干杯,大卫
spring-3 - 存在多个参数之一时的 RequestMapping
我有一个 Spring3 控制器,我在其中使用 @RequestMapping 注释。我知道我可以使用 params 值根据是否存在 url 参数进行路由,但是有没有办法根据两个参数之一的存在进行路由?
理想情况下,我会有以下内容:
如果存在参数错误或问题,我将路由到 errorInAuthenticate。
spring - Spring @Transactional 不适用于其他注释?
所以我的春季教育还在继续。目前我正在尝试学习一些注释以及它们为 Spring 3 带来的东西。所以我有一个迷你 web 应用程序,它可以连接到数据库并通过表单放入内容并显示记录等。一切正常。我决定尝试让 Spring 自动检测我标记为 @Transactional 的服务 bean,但这样做会阻止应用程序保存到数据库。所以:
这样可行。我的 springcourt-data.xml 文件中有这个类的 bean 声明。没问题。当我这样做时:
它不再起作用了。我确实有
在 springcourt-servlet.xml 文件中。那么谁能告诉我我在搞砸什么?我所做的只是向这个类添加另一个注释并从 xml 文件中删除 bean 定义,它不再将数据保存到数据库中。我仍然可以从数据库中查询记录和东西,但很明显它正在使用自动检测的服务 bean。
以下是配置文件:
和:
spring - 使用 JSF 的 Spring 注释
谁能告诉我应该如何在 JSF 应用程序中使用 Spring 注释,以便我可以使用 Spring 注释(例如 @Service 或 @Component)而不是 @ManagedBean 并在 jsf 视图页面上的 EL 表达式中使用该 bean。
首先我想知道这是否可能?如果是,如何?